永发信息网

C++大神看过来, getline 输出的 怎么不是输入的内容啊

答案:2  悬赏:20  手机版
解决时间 2021-01-31 06:25
#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;
}
最佳答案
没问题啊,正常运行。
全部回答
这个问题没有楼上说的那么简单,得从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; } 就可以发现楼上的答案都不对
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
指有你怎么去啊,我要去那办事
亚洲五号卫星定点位置是东经()。
我的广发信用卡一直都正常还款,但是提升额度
丝颜堂怎么去啊,我要去那办事
日本动画上的小偷为神马都带个绿头巾?
日语 厨房と接客中人を分けたほうがいいな、
秦朝时期,重视关中地区而压迫剥削关东地区;
禁令标志指示违反口多少分。
都市绿舟(宜宾店)地址在什么地方,想过去办事
导游人员必须在送站前24小时与游客或散客小包
邓勇成名字可打多少分
佳能Canon 打印机mp288 怎么清零
美丽空间美容美体养生馆地址在什么地方,想过
张静精品养生美容会所地址在什么地方,我要处
卓之雅贵族养疗会所(西区店)地址在什么地方,
推荐资讯
vivox6怎么弄双4g
工人下班路上出现意外与单位有多少责任
梦幻一组垃圾159渡劫号怎么赚钱?一天10-12小
一汽解放服务站地址在什么地方,我要处理点事
经期能吃有破血功效的食物吗
【一日游作文】作文《快乐的一日游》六年级的
已知圆c与圆x平方+y平方-2x=0相外切,并且与直
嘉华中心依威能源电动汽车充电站地址在什么地
优酷会员88元代金券有收的吗
卡莱尔洗衣店(大湖路89号卡莱尔洗衣店)地址在
阖道臻礼-翡翠订制会所地址有知道的么?有点
罗尔德达尔巨大的鳄鱼读后感。
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?