我无法理解如何从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
答案 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