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

How does cin works in a while loop when the inputs are given in a single line with white spaces?

考虑这一小段代码:

#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' 并在读取 whitespace.
后立即停止进一步读取 2.Prints 值 1。
第二次迭代
1. 再次请求新输入
2. 在第二行打印
但这并没有发生,而是它读取了我们在 space

之后给出的元素

第一次迭代:

  • 查看流中的下一个字符。这是一个数字('1'),所以请阅读它。
  • 查看流中的下一个字符。它不是数字(' '),所以不要读它;在 a 中存储 1,在 >> 中存储 return。

(输出1。)

第二次迭代:

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

(输出2。)

等等...

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

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

如果你想要一个健全的用户界面,总是阅读整行然后处理它们:

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