一尘不染

C ++:以编程方式初始化输入

linux

如果我们有以下代码片段:

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

在终端中,输入请求如下所示

please enter a value: _

如何以编程方式模拟用户的输入。


阅读 238

收藏
2020-06-03

共1个答案

一尘不染

这是一个示例,该示例如何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);
2020-06-03