C ++:以编程方式初始化input

例如,我们有这样的代码:

int a; cout << "please enter a value: "; cin >> a; 

terminal中,input请求将如下所示

 please enter a value: _ 

我怎样才能以编程方式input? 换句话说,模拟用户的input。

下面是一个示例如何使用rdbuf()函数来操作cin的输入缓冲区,以从std::istringstream检索假输入

 #include <iostream> #include <sstream> #include <string> using namespace std; int main() { istringstream iss("1 a 1 b 4 a 4 b 9"); cin.rdbuf(iss.rdbuf()); // This line actually sets cin's input buffer // to the same one as used in iss (namely the // string data that was used to initialize it) int num = 0; char c; while(cin >> num >> c || !cin.eof()) { if(cin.fail()) { cin.clear(); string dummy; cin >> dummy; continue; } cout << num << ", " << c << endl; } return 0; } 

看到它工作


另一种选择(更接近Joachim Pileborg在他的评论中所说的),就是把你的阅读代码放到一个单独的功能中,例如

 int readIntFromStream(std::istream& input) { int result = 0; input >> result; return result; } 

这使您可以有不同的测试和生产呼吁,如

 // Testing code std::istringstream iss("42"); int value = readIntFromStream(iss); // Production code int value = readIntFromStream(std::cin); 

嘿,你为什么不写你的输入纯文本文件,并将其重定向到cin? 这是最简单的方法。

打开命令提示符。 假设你用作输入的文本文件是in.txt ,你的程序是prog.exe 。 保持文本文件和程序在同一个文件夹中。 cd到你的文件夹。 然后键入:

prog.exe < in.txt

请记住,您的文本文件将被完全按照原样处理。 如果你知道cin只能捕获下一个空格字符,那么shoudld就不成问题,而字符串输入函数(例如cin.getline )只能赶上下一个换行符。

 //Sample prog.cpp #include <iostream> using namespace std; int main() { int num; do { cin >> num; cout << (num + 1) << endl; } while (num != 0); return 0; } //Sample in.txt 2 51 77 0 //Sample output 3 52 78 1 

对不起,如果你在其他平台上,我不知道他们。