gpt4 book ai didi

c++ - ifstream 识别文件结尾

转载 作者:行者123 更新时间:2023-11-30 05:09:42 26 4
gpt4 key购买 nike

我有一个包含以下格式数据的文件:

name1 p1 p2 ... p11
name2 p1 p2 ... p11
...

(参数不一定在一行)

我的目标是读取名称和 11 个参数,对它们做一些事情,然后对下一个数据 block 做同样的事情,直到没有更多。下面的代码做得很好,但在到达文件末尾后,它又执行了一次读取垃圾的操作。谁能帮我解决这个问题?

std::ifstream file("data.txt");
std::string name;
double p[11];

while(file.peek() != EOF){
file >> name
>> p[0] >> p[1] >> p[2] >> p[3]
>> p[4] >> p[5] >> p[6] >> p[7]
>> p[8] >> p[9] >> p[10];
/*
doing something with the data
*/
}
file.close();

最佳答案

在 C++ 中通常的做法是在提取后检查流状态:

while(file >> name 
>> p[0] >> p[1] >> p[2] >> p[3]
>> p[4] >> p[5] >> p[6] >> p[7]
>> p[8] >> p[9] >> p[10]) {
/*
doing something with the data
*/
}

如果输入中没有更多数据或错误,循环将停止。

这里有更多的信息是如何工作的以及为什么工作:

std::basic_ios::operator bool

关于c++ - ifstream 识别文件结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46024027/

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