从istream读取输入直到EOF

时间:2017-05-18 21:42:38

标签: c++ input

我无法理解如何从istream中读取代码。我试图做的程序分配是从用户或从cmdline的输入文件中检索输入(即./< input.txt)。用户输入值被传递给确定它是否是素数的函数。问题是当我传递一个包含多个整数或字符的输入文件(即.input.txt)时,它只读取第一个并且程序结束。我已经阅读了很多问题和答案,但我尝试过的许多解决方案都不起作用。

例如,input.txt包含:

2 3 4 5

2
3
4
5

这是我的程序,我不会提供我的isPrime功能,因为我相信它工作正常。这只是将输入文件传递到文件结尾的问题。我应该使用ifstream吗?我得到了一个提示,使用while循环读取直到文件结尾,但这只是继续吐出我在程序中输入的相同的第一个数据。

#include <iostream>
#include <cstdlib>
#include <limits>

using namespace std;

bool isPrime(int) { // Example return for isPrime
        return false;
}

int main(int argc, char *argv[]){
        // Initialize input integer
        int num = 0;

        cout << "Enter number to check if prime: ";
        cin >> num;

        // while loop to detect bad input
        while(!(cin >> num)){
                cin.clear(); // clear error flag
                cin.ignore(numeric_limits<streamsize>::max(), '\n'); //ignores bad input
        } // end while

        while(cin >> num){ // while there is valid input, do isPrime
            if(isPrime(num)){
                    cout << "prime\n";
            } else {
                    cout << "composite\n";
            }
        } // end while
        return 0;

} // end main

1 个答案:

答案 0 :(得分:1)

您正在错误地使用while循环。

使用:

int main(int argc, char **argv)
{
   int num = 0;

   // Keep reading from stdin until EOF is reached or
   // there is bad data in the input stream.
   while ( cin >> num )
   {
      if(isPrime(num)){
         cout << "prime\n";
      } else {
         cout << "composite\n";
      }
   }

   return 0;

} // end main