考虑这一小段代码:
#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/