辛如何工作?

新手上路,请多包涵

我运行了这段代码

char c;
cin >> c;
cout << c;
cin >> c;
cout << c;

并写入控制台 ab ,按下回车键。所以我在下一行得到了 ab 。但我无法理解它是如何工作的。在按下回车之前,程序什么都没有读,对吧? After pressing, it reads a , save it to char c , then reads char c , writes a to the console.没关系。但它怎么能读到 b 在第二行?第二行不是 b

原文由 Pavel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 278
2 个回答

cin 是一个阻塞输入。来自键盘的任何内容都存储在缓冲区中。当您按下回车键时,系统会将缓冲区传递给应用程序代码(std::cin 代码)。运算符 >> 将决定从该缓冲区读取多少 - 一个 char、string、int、float 等。取决于操作数的类型。

原文由 Sergei 发布,翻译遵循 CC BY-SA 3.0 许可协议

cin 是标准输入 。流特性对于深入理解 C++ I/O 至关重要。

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

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

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

接下来是另一个 cin >> c ,因此又读取了一个字符(这次是 b )。同样,一个字符就足够了,因此读取结束并且流内容只是 LINEFEEDb 然后被发送到标准输出流。

标准输入和标准输出流通常与控制台相关联这一事实不会以任何方式影响它们的内部工作。 cin 不会因为屏幕上同时出现一些输出而“忘记”其中的内容。特别是, cin 读取 键盘, 而不是“控制台上的字符”。碰巧的是,按键都会在控制台上回显它们并将它们馈送到 cin

因此,您的程序同时输出字符 a 这一事实对 cin 流的内容没有影响。

原文由 Angew is no longer proud of SO 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题