我有以下代码:
std::vector<std::string> final_output;
std::string input;
int tries = 0;
std::cin >> tries;
int counter = 0;
while(counter < tries) {
std::getline(std::cin, input);
final_output.push_back(input);
++counter;
}
鉴于输入:
3
Here Goes
Here Goes 2
输出结果为:
<blank line>
Here Goes
Here Goes 2
奇怪的是,它似乎第一次输入时输入一个空行。
但是,如果我的代码为:
int tries = 3; // explicitly specifying the number of tries
int counter = 0;
while(counter < tries) {}
它按预期工作。为什么std::cin >> tries
导致代码失败?
我已经使用VC ++ 2010和g ++ 4.4.3进行了测试
答案 0 :(得分:2)
当您输入tries
的号码时,您会点击返回键。阅读tries
后,点击返回键的回车仍然位于输入缓冲区中。回车通常会转换为换行符。您对getline
的下一次调用将读取输入缓冲区中的所有内容,直到下一个换行符。由于第一个字符是一个换行符,因此它将其读作一个零长度的行(即在换行符之前为零个字符)。
答案 1 :(得分:1)
第一个条目的换行符仍在输入缓冲区中。
您可以在阅读std::cin.ignore();
的尝试后立即致电cin
。
这样就会丢弃换行符。
我找到了一个很好的链接,解释了很多关于I / O使用的事情:
答案 2 :(得分:0)
您无法从独立'\n'
的第一行吸收std::cin >> tries
。