使用std::cin >>时是否可能丢弃回车符?

3
使用 C++ 中的 >> 运算符捕获用户输入时,是否有可能防止控制台打印由用户按下回车键时生成的换行符?

你能给我们举个例子吗?在什么情况下会打印新行? - David G
我认为你无法防止它,但你可以通过移动光标来处理它。 - ChiefTwoPencils
1
重复的问题 这里 - digital_revenant
3个回答

0

您可以通过每次按空格键输入值或输入。但最后必须按回车键。
比如说:您想输入“5,4,3,2,1”
您可以这样做:5 [enter] 4 [enter] 3[enter] 2[enter] 1[enter]
也可以这样做:5[space]4[space]3[space]2[space]1[enter]
但如果您想在输入附近打印输出,您可以先打印输入,然后再打印您想要的内容。
例如:
输入:3 输出:input+1
所以您将会这样做:

cout<<input;
cout<<" "<<input+1<<endl;

祝你好运 :)


0

可以通过从键盘输入两个EOF而不是回车符来防止这种换行行为。在控制台提示处输入字符串后,按

CTRL-D,CTRL-D

请注意,这是一个特定于平台的答案。这适用于我的Mac,但在Windows操作系统上,EOF序列可能是CTRL-Z,RETURN。我会感激一个答案编辑 <-- HERE。

或者,您可以放弃>>运算符,并使用类似std::getline的东西,并指定精确的字符串终止分隔符。例如:

std::string myString;
std::getline(std::cin, myString, ';');
std::cout << myString;

这将从标准输入读取到myString,并在找到第一个分号';'时放置字符串终止NULL字符。然后您只需要按一次CTRL-D(输入EOF)。


0

你无法阻止 newline 字符的出现,因为当你使用 cin 时,你正在与不受用户控制的 system core 进行通信。当你输入 \nEOF 或其他异常情况时,console 将返回。 因此更好的方法是使用 getchar() 捕获 '\n',并且不要将其留在 buffer 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接