我运行了这段代码
char c;
cin >> c;
cout << c;
cin >> c;
cout << c;
并写入控制台ab
,按下输入。所以我在下一行得到ab
。但我无法理解它是如何运作的。在按下输入之前,程序没有读取任何内容,对吧?按下后,它会显示a
,将其保存到char c
,然后读取char c
,将a
写入控制台。没关系。但是如何阅读b
在第二行呢?它不是b
在第二行
答案 0 :(得分:11)
Agent Total
xyz 50
Agent Total Brochure1 Brochure2 Brochure3
xyz 50 10 15 25
是标准输入流。流媒体性质对于理解C ++ I / O至关重要。
默认情况下,执行cin
表示:
从流中当前的点开始,跳过可能存在的任何空格,然后尽可能长时间地阅读&amp;必须获得
cin >> x
的有效表示。
让我们暂时忽略输入来自键盘的事实。开始时的流内容为x
。执行a b LINEFEED
,它将从输入中读取第一个字符cin >> c
。这足以填写a
,因此阅读停止。 c
流现在包含cin
。然后将变量b LINEFEED
写入标准输出。
接下来是另一个c
,因此会再读一个字符(这次cin >> c
)。同样,一个字符就足够了,所以阅读结束,流内容只是b
。然后将LINEFEED
发送到标准输出流。
标准输入和标准输出流通常与控制台绑定的事实不会以任何方式影响其内部工作。 b
并没有“忘记”其中的内容,因为在此期间屏幕上出现了一些输出。特别是,cin
读取键盘,而不是“控制台上的字符”。碰巧按下按键会在控制台上回显它们并将它们送到cin
。
因此,您的程序在此期间输出了字符cin
这一事实对a
流的内容没有影响。
答案 1 :(得分:2)
cin是一个被阻止的输入。来自键盘的任何内容都存储在缓冲区中。当您按Enter键时,系统将缓冲区传递给应用程序代码(std :: cin代码)。运营商&gt;&gt;将决定从该缓冲区读取多少 - 一个char,string,int,float等。取决于操作数的类型。
答案 2 :(得分:1)
cin和cout是缓冲流。两个&#39; a&#39;和&#39; b&#39;按Enter键进入输入缓冲区。 &#39;&gt;&gt;&#39;操作符从该缓冲区读取(在您的情况下一次一个char)。 &#39;&lt;&lt;&#;写入输出缓冲区。唯一让你感到惊讶的是你看到&#34; ab&#34;没有印刷的输出&#34; \ n&#34; (后一个符号应该将输出缓冲区的内容刷新到终端)。
简而言之,cin和cout都是缓冲区。输入和输出运算符使用这些缓冲区。换行符号启动从实际输入到输入缓冲区以及从输出缓冲区到实际输出的数据传输。
您可以学习更多关于I / O的事情。
答案 3 :(得分:0)
基本上,cin
对数据类型char
有一个重载只能从输入流中获取1个字符,所以你的程序基本上是这样的:
char c;
cin >> c; // reads 'a' from the input stream (input stream contains 'ab\n')
cout << c; // prints 'a'
cin >> c; // changes c to 'b' (reads 'b')
cout << c; // prints 'b'