gpt4 book ai didi

C++将文件读入结构

转载 作者:行者123 更新时间:2023-11-30 01:14:05 24 4
gpt4 key购买 nike

我使用 fstreams 打开了一个包含多行的文件。每组连续的 4 行是这样的:第一行是 int,第二和第三行是字符串,第四行是 double 。这个序列一直持续到 EOF。

我正在尝试将这些行加载到结构数组中:

struct Library {
int id;
string title;
string artist;
double price;
};

我试图实现的将数据加载到结构中的代码是这样的:

const int LIMIT = 10
Library database[LIMIT];
ifstream file;
file.open("list.txt");

if(file) {
while(!(file.eof()) && counter < LIMIT) {
file >> database[counter].id;
getline(file, database[counter].title;
getline(file, database[counter].artist;
file >> database[counter].price;
}
} else {
...
}

// Using the following to debug output
for(int i = 0; i < counter; i++) {
cout << "ID: " << database[i].id << endl
<< "Title: " << database[i].title << endl
<< "Artist: " << database[i].artist << endl
<< "Price: " << database[i].price << endl
<< "-----------------------" << endl;
}

我要扔给这东西的文件是

1234
Never Gonna Give You Up
Rick Astley
4.5
42
Thriller
Michael Jackson
32.1

我在这里遇到的问题是,在使用 file >> ... 读取 idtitle 之间getline(...) 是在某个地方引入了换行符,从而搞砸了输出,这显示了这个怪物...

ID:     1234
Title:
Artist: Never Gonna Give You Up
Price: 0
--------------------
ID: 0
Title:
Artist:
Price: 0
--------------------

该解决方案可能是最基本的解决方案,但主要是因为我无法弄清楚换行符到底发生了什么我无法组合一个短语来插入谷歌并在那里做我的事情,我我正处于我一直在研究问题的阶段,基础知识无法正常工作 - 例如如何处理基本输入流。

我们将不胜感激任何形式的帮助!提前致谢:)

最佳答案

发生这种情况是因为输入流的 >> 运算符只抓取一行的一部分,并不总是抓取行尾的换行符。当调用 getline 时,getline 将抓取先前解析的行的其余部分,而不是其后的行。有几种方法可以解决这个问题:您可以在每次读取后从输入流中清除缓冲区,或者您可以简单地从 getline 获取所有输入并将结果字符串解析为整数或当您需要调用 stoistod 时加倍。

作为旁注,您不想像现在这样检测文件的结尾。参见 why is eof considered wrong inside a loop condition?

关于C++将文件读入结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com