不输入数据默认结束的几种情况
int
正确、粗暴简单
int a=0;
while(cin>>a)
cout<<a;
错误情况
int a=0;
cin>>a;
while(a!=EOF)
{
cin>>a;
cout<<a<<endl;
}
输入完成按 Ctrl+z 会导致 一直循环最后一个数字。
EOF 是end of file,代表输入文件输入结束
这个里有一些解释,或者找度娘https://blog.csdn.net/sinat_36053757/article/details/66546610
int a=0;
cin>>a;
while(a!=NULL)
{
cin>>a;
cout<<a<<endl;
}
NULL在C++中代表0,当输入0的时候会结束,除此之外,按ctrl+z,也会一直循环输出最后一个数字
![](https://i-blog.csdnimg.cn/blog_migrate/f2847c84da14febaa06131eadc23771a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f2f2563e6797a81040ca41451b1f71f9.png)
char
正确 、简单粗暴
1.
char c;
while(cin>>c)
cout<<c<<endl;
2.
char c;
while((c=getchar())!=EOF)
cout<<c<<endl;
错误情况
char c;
while((c=getchar())!=NULL)
cout<<c<<endl;
按ctrl+z 或者0都停不下来
![](https://i-blog.csdnimg.cn/blog_migrate/26ac124032009142f28170b63c821a33.png)
string
正确代码——内部有空格输入一行的字符串
string s;
while(getline(cin,s))
cout<<s<<endl;
正确代码——内部无空格的字符串
string s;
while(cin>>s)
cout<<s<<endl;
![](https://i-blog.csdnimg.cn/blog_migrate/bd779c04a4d818efb60482527bcfa07d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/581e85ffe61b24187bc602fedeaf47c3.png)
错误情况
string s;
getline(cin,s);
while(s[0]!=EOF)
{
getline(cin,s);
cout<<s<<endl;
}
按ctrl+z根本无法停止
![](https://i-blog.csdnimg.cn/blog_migrate/56176d087b966bd00607d8e626d5ecf0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7caac8309ed1954b4244469500dbc4ab.png)
特殊情况
string s;
getline(cin,s);
while(s[0]!=NULL)
{
getline(cin,s);
cout<<s<<endl;
}
在本地编译器里按 ctrl+z 可以正常停止,但是上交oj系统会出现错误,所以做题还是不建议用
![](https://i-blog.csdnimg.cn/blog_migrate/abc2f931bef6303bf7770fb59be6e015.png)