如果我们有这段代码:
int a;
cout << "please enter a value: ";
cin >> a;
在终端中,输入请求看起来像这样
please enter a value: _
我如何以编程方式模拟用户在其中输入内容。
答案 0 :(得分:8)
此处了解如何使用 rdbuf()
功能操纵cin
的输入缓冲区,以便从{{1}检索虚假输入}
std::istringstream
<强> See it working 强>
另一种选择(更接近Joachim Pileborg在his comment恕我直言中所说的)是将你的阅读代码放入一个单独的函数,例如。
#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;
}
这使您可以对测试和生产进行不同的调用,例如
int readIntFromStream(std::istream& input) {
int result = 0;
input >> result;
return result;
}
答案 1 :(得分:2)
嘿,为什么不在纯文本文件中写入输入并将其重定向到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
对不起,如果你在其他平台上,我也不了解它们。