繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM