【问题标题】:How do you stop reading integer from text file when encounter negative integer?遇到负整数时如何停止从文本文件中读取整数?
【发布时间】:2011-07-31 12:30:26
【问题描述】:

我试图用 C++ 编写一个简单的代码来从文本文件中读取整数,当遇到负整数时,代码应该停止读取。 txt文件每行包含1个正整数,最后一行是负整数。

我的代码现在使用 eof,它也读取负整数,这是我不想要的。

while(!inFile.eof())
{
    inFile >> data;
}

文本文件

10
22
33
34
-1   

提前致谢:)

【问题讨论】:

    标签: c++


    【解决方案1】:

    嗯..

    int data = 0;
    while(inFile >> data && data >= 0) 
    {
     // do stuff with data.
    }
    

    【讨论】:

    • @LightnessRacesinOrbit,我认为代码非常简洁地解释了需要做什么......一个好奇的读者应该能够接受那里的内容并调查他们不确定的部分 - 一项有价值的技能海事组织...
    • 是的,我同意,但是当 OP 已经表明他在这方面缺乏一些理解时,在不解释 为什么 你这样做的情况下更改代码位通常更多有害无益。否则他可能会认为你删除while (!eof) 只是出于风格原因,例如。
    【解决方案2】:

    您至少需要读取负数来确定您已到达输入结尾。

    while( inFile >> data)
    {
        if ( data < 0 ) break;
    }
    

    【讨论】:

    • 完全错了。 (任何时候你看到istream::eof() 是一个循环条件,代码几乎肯定是错误的。)
    • 但不是评论:-)。使用istream::eof() 是原始代码中的一个错误,应该指出这一点。 (否则,尼姆的答案是完美的。)
    【解决方案3】:
    while(!infile.eof())
    {
    infile>>data;
    if(data>0)
    cout<<data;
    }
    

    从文件中读取,检查是否大于零,然后打印出来

    【讨论】:

      【解决方案4】:

      也许像这样尝试测试传入整数的方法会起作用:

      while(!inFile.eof())
      {
          inFile >> data;
          if ( data < 0 ) {
            break;
          }
      }
      

      【讨论】:

      • 因为答案是错误的:在您尝试阅读 EOF 之前,不会命中 EOF。所以 EOF 不是在inFile &gt;&gt; data; 之前设置的,而是在这个调用之后设置的。设置后,即使值现在基本上是随机的,您仍然使用数据。请记住,最后一次成功的读取将读取到 但不会超过 EOF。最后一次读取将尝试读取过去并失败(此时您无法使用正在读取的值)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多