C++:通过fstream读取txt文件
C++: Reading txt file through fstream
我有一个.txt文件,看起来像这样:
Toy ball
1.25
DVD
20.00
Row Boat
1.00
第一行是项目,第二行是价格,它在接下来的两个项目中重复,以此类推。所以我的问题是,我如何将第一行放在字符串中,第二行将它放在浮点值中?这是我的代码,我正在使用structs。
const int TOTAL_ITEMS = 3;
for (int itemNumber = 0; itemNumber < TOTAL_ITEMS; itemNumber++) {
string line;
getline(inFile,line);
list[itemNumber].item = line;
float cost;
inFile >> cost;
list[itemNumber].price = cost;
}
然后我打印列表:
for (int itemNumber = 0; itemNumber < TOTAL_ITEMS; itemNumber++) {
cout << itemNumber << ": " << list[itemNumber].item << " " << list[itemNumber].price << endl;
现在,这并没有打印出我想要的内容,struct数组只输入了第一行和第一个价格并打印出来,但其他的都说"0"。任何帮助都会很棒。谢谢各位
float
输入(顺便说一句,只需使用double
,麻烦更少)在输入缓冲区中留下一个换行符,由后续的行输入消耗。
相反,对这两行都使用getline
。
然后使用例如istringstream
将第二行转换为。。。double
,只需像从inFile
中读取一样从中"读取"即可。
除了直接修复错误之外,您还需要检查inFile
的流状态,例如通过调用其fail
成员函数。当您直接使用流对象作为条件时,它到bool
的转换会为您调用fail
,并否定结果,因此流对象本身表示"未失败"。请注意,good
是,而不是,与fail
相反,还请注意,失败状态是持久的,会导致忽略后续的输入操作。
您需要在使用输入时检查流状态。您可以通过检查getline()和运算符>>的返回值来完成此操作:
if (!getline(inFile,line))
; // oops, error, do something
if (!(inFile >> cost))
; likewise
一旦你这样做了,你会发现你的输入失败了,因为你读东西有点错误,但一旦你看到它坏了,就不难修复。
相关文章:
- 如何将 txt 文件中的行分隔为组件C++
- 无法打开.txt文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 使用fstream对txt文件中的数字进行循环
- Visual Studio在尝试读取resource.txt文件时崩溃
- 如何从txt文件中读取多个不同长度的数组?
- 在一次迭代中从 txt 文件中读取多行
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 写入超过 1GB 的.txt文件时出现奇怪的行为
- 视觉 如何循环访问C++中遵循类似格式的多个.txt文件?
- txt 文件中浮点数的最大和最小值
- 从.txt文件中读取浮点型数字并在公式中使用它们
- C++将文本从.txt文件解析为变量
- 在树结构.txt文件中搜索节点
- 为什么我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?
- 在 txt 文件中显示前两个数字的程序
- 如何从具有两列的.txt文件创建并行数组?
- 如何使用c ++读取带有非英文字母的*.txt文件?(国际化)
- 如何像在 C++ 中处理数组一样对 .txt 文件中的字符进行寻址?
- 如何读取 TXT 文件并仅将 int 存储在 C 中