下面是C++ Primer中的一段代码:
int main()
...{
string line ;
while (getline(cin , line))
cout << line << endl ;
return 0 ;
}
我按照此代码编译运行后发现,在输入一行字符串后必须进行2次回车换行,程序
才会输出该字符串 , 就是说不能及时看到最近的输出信息。
这和
while (cin >> line)
cout << line <<endl ;
有很大区别,利用cin在输入一行字符串只经过一次回车换行,立刻就能输出该字
符串的信息。
请教高人:同样是输入,同样使用while语句,为何会造成这样的差别?
int main()
...{
string line ;
while (getline(cin , line))
cout << line << endl ;
return 0 ;
}
我按照此代码编译运行后发现,在输入一行字符串后必须进行2次回车换行,程序
才会输出该字符串 , 就是说不能及时看到最近的输出信息。
这和
while (cin >> line)
cout << line <<endl ;
有很大区别,利用cin在输入一行字符串只经过一次回车换行,立刻就能输出该字
符串的信息。
请教高人:同样是输入,同样使用while语句,为何会造成这样的差别?
有人回复说是VC的BUG,不知道是否属实,下面是一种我比较认同的解释:
MyTurn 原创
2006
-
07
-
19
11
:
15
:
54
查看评论
#include < iostream >
#include < string >
using namespace std;
void main( void )
...{
string st ;
cout << " Input st: " ;
getline(cin,st);
cout << st << endl;
}
上面这段代码,如果输入abc,那么需要按两次回车键才能显示abc(在VC6中),因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成 getline(cin,st, ' s ' ); 即使输入的是abcsabc 那么也只会显示 abc ,因此对于上面出现的情况,有人说getline默认情况下以回车( ' ' )作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。也有人说这是VC6的bug,我觉得前一种解释比较合理,因为:
如果你输入abc(回车)abc,那么程序会显示abc,可见回车的确是函数默认的结束符。
#include < iostream >
#include < string >
using namespace std;
void main( void )
...{
string st ;
cout << " Input st: " ;
getline(cin,st);
cout << st << endl;
}
上面这段代码,如果输入abc,那么需要按两次回车键才能显示abc(在VC6中),因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成 getline(cin,st, ' s ' ); 即使输入的是abcsabc 那么也只会显示 abc ,因此对于上面出现的情况,有人说getline默认情况下以回车( ' ' )作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。也有人说这是VC6的bug,我觉得前一种解释比较合理,因为:
如果你输入abc(回车)abc,那么程序会显示abc,可见回车的确是函数默认的结束符。
关于getline函数:
Getline函数是编辑控件的成员函数,读取控件里的内容cin.getline是从屏幕读入字符串。MFC中有文件类的read函数从文件读取数据。
或不用MFC用文件流提取操作符 <<
怎么结束这个循环 ?
答案:用 Ctrl + C
或不用MFC用文件流提取操作符 <<
怎么结束这个循环 ?
答案:用 Ctrl + C
下面是添加完整的测试源码:
#include
<
iostream
>
#include < string >
using namespace std;
int main()
...{
string line;
while (getline(cin, line))
cout << line << endl;
return 0 ;
}
#include < string >
using namespace std;
int main()
...{
string line;
while (getline(cin, line))
cout << line << endl;
return 0 ;
}
源码2:
#include
<
iostream
>
#include < string >
using namespace std;
int main()
...{
string line;
while (cin >> line)
cout << line << endl;
return 0 ;
}
#include < string >
using namespace std;
int main()
...{
string line;
while (cin >> line)
cout << line << endl;
return 0 ;
}