cin>>循环结束问题

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,实验结果:

    1. 回车CTRL+D:直接退出循环;

      Input:
      1 2 3 4
      
      The results are:
      1 
      2 
      3 
      4 
      
    2. CTRL+DCTRL+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+DCTRL+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+DCTRL+D:直接退出循环;
  • 结束符\n无效,会被作为字符串处理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章