cin如何工作?

Pav*_*vel 7 c++ iostream

我运行了这段代码

char c;
cin >> c;
cout << c;
cin >> c;
cout << c;
Run Code Online (Sandbox Code Playgroud)

并写入控制台ab,按下输入.所以我ab到了下一行.但我无法理解它是如何运作的.在按下之前,程序没有读取任何内容,对吧?按下后,它会读取a,保存到char c,然后读取char c,写入a控制台.没关系.但它怎么能读到b第二行呢?它不在b第二行

Rei*_*ica 13

cin是标准输入.流媒体性质对于理解C++ I/O至关重要.

默认情况下,执行cin >> x意味着:

从当前流中的点开始,跳过可能存在的任何空格,然后尽可能长时间地阅读以获得有效的表示x.

让我们暂时忽略输入来自键盘的事实.开始时流的内容是a b LINEFEED.执行cin >> c,a将从输入中读取第一个字符.这足以填补c,所以阅读停止.该cin数据流中包含b LINEFEED.c然后将变量写入标准输出.

cin >> c接下来是另一个,所以再读一个字符(这次b).同样,一个字符就足够了,所以阅读结束,流内容正好LINEFEED.将b然后被发送到标准的输出流.

标准输入和标准输出流通常与控制台绑定的事实不会以任何方式影响其内部工作.cin不会"忘记"其中的内容只是因为在此期间屏幕上出现了一些输出.特别是,cin读取键盘,而不是"控制台上的字符".碰巧按下按键会在控制台上回显它们并将它们送到cin.

因此,您的程序a在此期间输出字符的事实cin对流的内容没有影响.


Ser*_*gei 2

cin 是阻塞输入。无论来自键盘的内容都存储在缓冲区中。当您按 Enter 键时,系统会将缓冲区传递给应用程序代码(std::cin 代码)。运算符 >> 将决定从该缓冲区读取多少内容 - 一个字符、字符串、整数、浮点数等。取决于操作数的类型。