我在做计算器。
我从GUI检索用户输入并将其存储在std::vector<char> c
现在我需要将c
中的每个字符都添加到std::cin
中,这是因为计算器引擎基于std::cin
,我只想在上面添加一个GUI层顶部。
我写了一些示例代码来演示我的问题,这不是实际的应用程序:
#include <iostream>
#include <vector>
int main()
{
int length = 6;
std::vector<char> in(length);
in[0] = 'H';
in[1] = 'e';
in[2] = 'l';
in[3] = 'l';
in[4] = 'o';
in[5] = '\0';
for (int i = 0; i < length; ++i)
{
char a = in[i];
std::cout << "a: " << a << std::endl;
std::cin.putback(a);
}
char y = 0;
while(std::cin >> y)
{
std::cout << "y: " << y << std::endl;
if (y == '\0')
{
std::cout << "This is the end!" << std::endl;
}
}
}
我的预期结果是从while(std::cin >> y)
循环中获取输出。
问题是没有输出。
编辑:
思考我的问题的另一种方法是。假设我制作了一个程序,该程序依赖于std::cin
的用户输入,并且输入可以是任何主要类型。现在,如果我想通过不带shellscript的输入来测试程序,我将如何做(从程序源代码中)?
答案 0 :(得分:0)
我不太清楚你要干什么,但这是我的看法。
我对您的问题的理解可能是错误的,但是这个小片段将您的std::vector<char>
推入std::cin
,然后遍历它,直到您遇到EOF。
#include <iostream>
#include <vector>
int main() {
int length = 6;
std::vector<char> in(length);
in[0] = 'H';
in[1] = 'e';
in[2] = 'l';
in[3] = 'l';
in[4] = 'o';
in[5] = '\0';
for (auto a = in.crbegin(); a != in.crend(); ++a) {
std::cout << "a: " << *a << std::endl;
std::cin.putback(*a);
}
while (std::cin) {
char y;
std::cin >> y;
std::cout << "y: " << y << std::endl;
if (y == '\0') {
std::cout << "This is the end!" << std::endl;
break;
}
}
}
我猜因为std::cin
的第一个元素是EOF,因为std::cin.pushback()
以LIFO的形式运行,所以它对您不起作用