c++ - 当输入在带有空格的单行中给出时,cin 在 while 循环中如何工作?

标签 c++ cin

考虑这一小段代码:

#include <iostream>
#include<stdio.h>

using namespace std;

int main() {
int a;  

while(true){
cin>>a;
cout<<a;
}
return 0;
} 

输入
1 2 3 5 7 23

输出
125723

我认为它会如何运行:
第一次迭代 1. 读取第一个输入,即“1”,并在读取空白后立即停止进一步读取。
2.打印值1。
第二次迭代
1.再次要求新的输入
2. 在第二行打印
但这并没有发生,而是读取我们在空格后给出的元素

最佳答案

第一次迭代:

  • 查看流中的下一个字符。这是一个数字 ('1'),因此请读取它。
  • 查看流中的下一个字符。它不是数字 (' '),所以不要读取它;将 1 存储在 a 中,并从 >> 返回。

(输出1。)

第二次迭代:

  • 查看流中的下一个字符。它是空格 (' '),因此请阅读并忽略它。
  • 查看流中的下一个字符。这是一个数字 ('2'),所以请阅读它。
  • 查看流中的下一个字符。它不是数字 (' '),所以不要读取它;将2存储在a中并从>>返回。

(输出2。)

等等...

重点是 >> 不关心行。 cin 是一个长输入字符流(其中一些可能是'\n')。您唯一能做的就是阅读更多字符(然后可能决定不想对它们做任何事情)。

cin 不一定连接到键盘。启动您的程序可以决定 cin 从哪里读取。它可以是文件、网络套接字或交互式用户输入。在后一种情况下,从 cin 读取可能会阻塞,直到用户键入更多输入,但它永远不会导致输入被丢弃。

如果您想要一个健全的用户界面,请始终阅读整行并在之后处理它们:

std::string line;
while (std::getline(std::cin, line)) {
    // do stuff with line
}

关于c++ - 当输入在带有空格的单行中给出时,cin 在 while 循环中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52565981/

相关文章:

c++ - 需要释放 QList 内容?

c++ - 为什么要在方法参数列表中添加 void

c++ - 是否可以从 cin 输入 "prepare"?

c++ - 简单的菜鸟 I/O 问题 (C++)

c++ - 为什么用cin做数值变量是 "bad"?

c++ - 在 C++ 中读取输入并分配给不同的变量

c++ - 为什么 ideone.com 这样做?

c++ - 如何以编程方式激活 Windows Mobile 中的菜单

c++ - 从第二个父亲访问 'this'指针作为第一个父亲的指针是否安全?

c++ - 较长的 getline cin 输入问题