我试图获得(在C ++中)键盘的一些输入,我想存储以供以后使用。这只是我正在处理的代码的简化版本,但它重现了相同的行为:
#include <iostream>
int main(int argc, char * * argv)
{
std::string line;
std::cout << "> ";
std::getline(std::cin, line);
return 0;
}
getline
正确读取stdin的输入,但输入在新行之后立即打印。此外,在读取输入时忽略>
字符后的空格,但在之后打印。类似的东西:
>hi
> hi
为什么会这样?我怎么能避免它?
我在Windows 10上使用CLion 2016.1(这发生在CLion的控制台上)。
答案 0 :(得分:2)
我该如何避免呢?
最简单的方法是在调试模式下运行它。
答案 1 :(得分:1)
为什么会这样?
可能是因为输出缓冲。
我该如何避免呢?
在使用getline()
代替std::cout << "> " << std::flush;
致电std::cout << "> ";
之前,打印应打印的内容。
答案 2 :(得分:0)
为什么不使用std :: cin?奇怪的行为可能是因为你的平台。
您有std::cout
后跟getline()
功能。根据您使用的编译器,getline
中的某些行为可能会稍微不同地定义。有些人可能无法重现您的行为。
基本上,在传统的C ++键盘输入/输出方式中,大多数人在大多数输入或输出后都使用std::endl
调用。 endl
内有flush()
自动调用以刷新标准缓冲区。但是,getline()
函数是C语言的延续。在C中,通常需要重复使用flush()
命令来获取所需的输出。这就是为什么最好尽可能坚持C风格输出或C ++风格输出的原因之一。
为什么不能使用std::cin
?您可以使用endl
来跟进它,之后一切都应该很好。
或者,您可以通过调用裸endl
或flush()
来解决问题,以便在定义的行为范围内恢复原状。
您是否有理由明确需要getline()
?