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

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

本文关键字:while cin 工作 循环 输入 空格 单行中      更新时间:2023-10-16

考虑这一小段代码:

#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
}