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

时间:2014-12-26 10:59:26

标签: c++ linux terminal

如果我们有这段代码:

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

在终端中,输入请求看起来像这样

please enter a value: _

我如何以编程方式模拟用户在其中输入内容。

2 个答案:

答案 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

对不起,如果你在其他平台上,我也不了解它们。