前言:
刷题时,由于不用自己搞输入输出,所以正式做企业题时,在输入输出方面总要话多一点时间。说来惭愧,自己连最常见的cin都有点不大了解。尤其是遇到多行输入的情况,处理换行。
废话不多说,上代码:
char p;string str;
int i = 0;
while(cin>>p)//会自动跳过上面的换行符!
{
i++;
// if(p =='\n') break; 注意 cin>>是不会读入换行符的!!!,所以得用 cin.get()!!! 而且是放在while最后一句!!!
str+=p;
char pp = cin.get();
cout<<i<<" p "<<p<<" pp " <<pp<<endl;
if(pp =='\n') break; //cin.get()会读入换行符,也还会读入空格...
}
cin>> 是会跳过空格和换行符的,而cin.get()会读进来。因此得用cin.get()来判断有没有读到'\n' 换行符(enter键)来退出while。
而且cin>> 与 cin.get()是顺序读取的,举个例子:
输入:
a空格b空格c空格enter键
输出:1 p a pp
2 p b pp
3 p c pp
然后就退不出来了,因为读到 enter键被cin>>略过了,而接着的cin.get()就读不到了,使用就不会break;
如果是这么输入的话 : a空格b空格center键 // c后面不加空格,直接enter键
才会退出;
当然一般我们都是这么搞退出的
char p;string str;
int i = 0;
while(cin>>p)//会自动跳过上面的换行符!
{
i++;
// if(p =='\n') break; 注意 cin>>是不会读入换行符的!!!,所以得用 cin.get()!!! 而且是放在while最后一句!!!
str+=p;
//char pp = cin.get();
//cout<<i<<" p "<<p<<" pp " <<pp<<endl;
if(cin.get() =='\n') break; //cin.get()会读入换行符,也还会读入空格...
}
一开始我还以为cin.get()只是读了最后的换行符,其实不是的,它一直在读空格,直到字符后面没空格,直接接换行符时,就break, 所以输入: a空格b空格center键 就会正常退出了。