我是c ++编程的新手,我尝试使用结构数组(如果我以你理解的方式说出来,就不知道了)。程序确实读取了文本文件中的变量,但它读取了2次,概率不是一个大问题,因为变量没有改变,只是以防万一
struct menesine_temperatura
{
int diena[10];
int rytas[10];
int pietus[10];
int vakaras[10];
};
int main()
{
menesine_temperatura mt;
int n;
ifstream failas("duomenys.txt");
while(!failas.eof())
{
failas >> n;
cout << n << endl;
for(int i = 0; i < n; i++)
{
failas >> mt.diena[i] >> mt.rytas[i] >> mt.pietus[i] >> mt.vakaras[i];
cout << mt.diena[i] << mt.rytas[i] << mt.pietus[i] << mt.vakaras[i] << endl;
}
}
failas.close();
return 0;
}
正如我之前提到过的那样。对这些东西不熟悉,所以请帮助。
答案 0 :(得分:0)
使用您拥有的代码,它看起来好像最后一组数字被读取了两次。
这是一个解释逻辑错误的简单示例。
int main()
{
int n;
std::ifstream inf("data.txt");
while ( !inf.eof() )
{
inf >> n;
std::cout << n << std::endl;
}
}
,您的输入文件包含
10
20
在循环的第一次迭代中,10
被读入n
并打印10
。
在循环的第二次迭代中,20
被读入n
并打印20
。
此时inf.eof()
仍为false
。所以你第三次进入循环。目前,n
没有读取任何内容,但仍会打印n
20
和20
的值。
逻辑错误是因为inf.eof()
是false
,您认为文件中仍有一些数据可以读取。
更好的方法是使用:
int main()
{
int n;
std::ifstream inf("data.txt");
while ( inf )
{
if ( inf >> n )
{
std::cout << n << std::endl;
}
}
}
我希望这能为您提供有关如何更新程序的足够信息。