【发布时间】:2016-08-23 04:23:31
【问题描述】:
我运行了这段代码
char c;
cin >> c;
cout << c;
cin >> c;
cout << c;
然后写信到控制台ab,按下回车键。所以我在下一行得到了ab。但我无法理解它是如何工作的。在按下回车之前,程序什么都没有读,对吧?按下后,读取a,保存到char c,然后读取char c,写入a到控制台。没关系。但是它怎么能读到b 在第二行呢?第二行不是b
【问题讨论】:
-
'c'是一个char类型,您执行两次cin >> c;,这意味着当它们可用时它将读取两个chars。因此,它读取'a',然后通过cout << c;打印它,然后读取'b'并打印它。因此,预计会打印'a'和'b'(例如ab)。 -
@JamesAdkison 但是当程序写
b时,它位于第二行。怎么能回到第一行呢? -
不太确定 cin 在内部是如何工作的,但它确实希望在您完成输入时按下新行 (Enter)。所以,它读到的可能是“a\n”,但它只显示第一个 cout 中的 a。然后,同样适用于“b\n”,但再次显示 b。 Cin 吃掉了换行符 '\n'。好读:en.cppreference.com/w/cpp/io/cin 和 en.cppreference.com/w/cpp/io/basic_istream/ignore。第二个特别有一个示例,说明如何忽略 N 个字符或直到预期的 '\n' 字符。编辑:对于您的评论,您按下回车键使其向下移动:)
-
@Pavel 如果您仍有疑问,请提供a Minimal, Complete, and Verifiable example。此外,如果您可以准确显示您输入的内容和您看到的输出(即edit 您的问题以添加这些详细信息)。
-
@JamesAdkison 我想说这个概念从当前问题中的代码中非常清楚。为什么要强制用户添加
main和using namespace std;(或者您觉得MCVE 缺少什么)?它们与手头的问题无关。