使用for循环从.text文件中读取struct数组使其循环两次

时间:2015-04-12 18:53:49

标签: c++ arrays

我是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;
}

正如我之前提到过的那样。对这些东西不熟悉,所以请帮助。

1 个答案:

答案 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 2020的值。

逻辑错误是因为inf.eof()false,您认为文件中仍有一些数据可以读取。

更好的方法是使用:

int main()
{
   int n; 
   std::ifstream inf("data.txt");
   while ( inf )
   {
      if ( inf >> n )
      {
         std::cout << n << std::endl;
      }
   }
}

我希望这能为您提供有关如何更新程序的足够信息。