如果我们有以下代码片段:
int a; cout << "please enter a value: "; cin >> a;
在终端中,输入请求如下所示
please enter a value: _
如何以编程方式模拟用户的输入。
这是一个示例,该示例如何cin使用rdbuf()函数来操纵的输入缓冲区,以从检索假输入std::istringstream
cin
rdbuf()
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; }
看到它正常工作
另一个选择(与JoachimPileborg在其评论恕我直言中所说的更接近)是将阅读代码放入单独的函数中,例如
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);