[英]C++ : initialize input programmatically
如果我们有以下代码片段:
int a;
cout << "please enter a value: ";
cin >> a;
在终端中,输入请求如下所示
please enter a value: _
如何以编程方式模拟用户的输入。
这是如何使用rdbuf()
函数操作cin
的输入缓冲区,以从std::istringstream
检索假输入的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
仅捕获到下一个空格字符,而字符串输入函数(例如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
抱歉,如果您使用的是其他平台,我不知道它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.