用一串命令预加载cin

preload cin with a string of commands

本文关键字:命令 加载 cin 一串      更新时间:2023-10-16

我正在测试需要几个控制台命令才能执行的函数。而不是每次我想要测试某个特定方法的功能时都必须键入这些命令,我希望能够在源代码中粘贴一两行代码,从而有效地完成与键入命令相同的工作。我尝试了下面的代码,但它似乎只是无限循环。

streambuf *backup;
backup = cin.rdbuf();
stringbuf s = stringbuf("1 a 1 b 4 a 4 b 9");
cin.rdbuf(&s);
cin.rdbuf(backup); 

下面的代码可以很好地运行

#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());
    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;
}