C++大神看过来, getline 输出的 怎么不是输入的内容啊
解决时间 2021-01-31 06:25
- 提问者网友:动次大次蹦擦擦
- 2021-01-30 22:02
#include
#include
using namespace std;
class foo
{
public:
string dizhi;
private:
string num;
char company[20];
char name[20];
// empty//
};
int main()
{
string line;
while(getline(cin,line))
cout< return 1;
}
最佳答案
- 五星知识达人网友:山河有幸埋战骨
- 2021-01-30 23:11
没问题啊,正常运行。
全部回答
这个问题没有楼上说的那么简单,得从getline的源代码说起,应该算是getline函数的小bug.
p.j. plauger的getline实现中有这么一段
for (; ; _c = _i.rdbuf()->snextc())
if (_tr::eq_int_type(_tr::eof(), _c))
{
_st |= ios_base::eofbit;
break;
}
else if (_tr::eq((_e)_c, _d))//这里_d表示行结束符,默认为'\n'
{
_chg = true;
_i.rdbuf()->snextc();//问题出在这里,当_c已经读取到'\n'时,输入流指针已经到了末尾,不应该再读取下一个字符,因此_i.rdbuf()->snextc()将调用api函数,在标准输入的情况下,用户必须输入任意字符(或者没有)+回车才能让_i.rdbuf()->snextc()执行结束.是getline没有正确处理好标准输入流导致的
break;
}
else if (_x.max_size() <= _x.size())
{
_st |= ios_base::failbit;
break;
}
else
_x += _tr::to_char_type(_c), _chg = true;
_catch_io_(_i);
}
//楼主个可以把程序改成
main(){
string s1;
getline(cin,s1);
cout<<s1<<'\n';
getline(cin,s1);
cout<<s1<<'\n';
getline(cin,s1);
cout<<s1<<'\n';
return 0;
}
就可以发现楼上的答案都不对
我要举报
大家都在看
推荐资讯