为什么我的代码中的nr
变量增加到5以上?
当我测试while循环迭代的次数时,它比我的数据文件中的元素循环的次数多,我无法理解为什么。
数据文件包含 - a 1 2 3 b
这是我的代码:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
struct SOMETHING
{
string string[10];
int int_1[100];
};
void main()
{
int nr = 0;
SOMETHING P;
ifstream D("data.txt");
while(!D.eof())
{
nr++;
if (nr == 1 || nr % 5 == 0)
{
D >> P.string[nr];
cout << P.string[nr] << " ";
}
D >> P.int_1[nr];
cout << P.int_1[nr] << " ";
}
D.close();
}
答案 0 :(得分:1)
检查这个:
while(!D.eof())
{
nr++;
if (nr == 1 || nr % 5 == 0)
{
D >> P.string[nr];
cout << P.string[nr] << " ";
}
D >> P.int_1[nr];
cout << P.int_1[nr] << " ";
}
nr
变量超过5的原因是,在每次成功读取每一行后,您都没有重置nr
。我不知道是否是你想要什么,但你实现它的方式有一个问题(见下文):
您的结构元素显然有10个元素的空间,但您只需检查并存储索引1处的元素和5的倍数:0, 1, 5, 10, etc.
使用eof
方法是不好的做法,因为@ P0W在他的评论中已经注意到了。使用while循环代替std::getline
。
答案 1 :(得分:0)
ifstream的内部指针没有被更新,因此while循环将无限期地运行,因为eofbit永远不会被设置。