cin>>循环跳出问题
1.循环输入数值cin>>num
int num;
vector<int> vec;
while(cin>>num){
vec.push_back(num);
}
for(auto a:vec)
cout<<a<<" "<<endl;
-
以非空格作为num的开始,以遇到的第一个空格作为num的结束,因此输入的时候只要数值之间以空格隔开即可,无论几个空格都可以;
-
回车的作用:每按下一次回车键,输入的数据就会被输入缓冲区,此时会检查缓冲区中有无结束符
\n
和非法字符(任何字母)的存在,如果存在,则退出循环,且结束符和非法字符之后的数据不会被循环体处理;Input: 1 2 3\n 4 5 6 The results are: 1 2 3
Input: 1 2 3m n 4 5 6 The results are: 1 2 3
-
另一种退出循环的方式是
CTRL+D
,实验结果:-
回车
+CTRL+D
:直接退出循环;Input: 1 2 3 4 The results are: 1 2 3 4
-
CTRL+D
+CTRL+D
:直接退出循环;Input: 1 2 3 4 The results are: 1 2 3 4
-
2.循环输入字符串cin>>str
- 以非空格作为str的开始,以遇到的第一个空格作为str的结束,因此输入的时候只要字符串之间以空格隔开即可,无论几个空格都可以;
string str;
list<string> l;
cout<<"Input:"<<endl;
while(cin>>str){
l.push_back(str);
}
cout<<endl<<"The results are:"<<endl;
for(auto a:l)
cout<<a<<" "<<endl;
回车
+CTRL+D
:直接退出循环;CTRL+D
+CTRL+D
:直接退出循环;- 结束符
\n
无效,会被作为字符串处理
Input:
a b c d e
The results are:
a
b
c
d
e
getline()循环跳出
string s;
list<string> l1;
cout<<"Input:"<<endl;
while(getline(cin,s))
l1.push_back(s);
cout<<endl<<"The results:"<<endl;
for(auto a:l1)
cout<<a<<endl;
- 此时,不再以空格作为一个字符串的结束,而是把一整行作为一个字符串
Input:
a b c d
e f g
hi j k
The results:
a b c d
e f g
hi j k
回车
+CTRL+D
:直接退出循环;CTRL+D
+CTRL+D
:直接退出循环;- 结束符
\n
无效,会被作为字符串处理