一个关于getline函数的问题……

[复制链接]
查看11 | 回复3 | 2011-12-21 01:59:19 | 显示全部楼层 |阅读模式
解决方法很简单:在cin >> n;后加上cin.ignore();就OK了,即cin >> n; cin.ignore();
//ignore()函数表示读取并丢掉一个字符。原理:在输入变量n的值后,回车换行符仍保留在输入流中,再下次使用输入语句时会直接将回车换行符输入给下一个变量(当然变量必须能接收此值,一般情况下cin都会直接过滤掉空白,换行,制表符,也就是这些字符使用cin进行输入不会被变量接收,而是继续被留在输入流中,但getline和get就不同,他们会把这些字符输入给相应的变量),cin读入的内容是过滤掉空白,换行,制表符之后第1个有效字符输入给变量,直到输入的字符与此变量的类型不皮配或者再次遇到空白...
回复

使用道具 举报

千问 | 2011-12-21 01:59:19 | 显示全部楼层
问题在于此:你需要理解getlinegetline(cin, a)和cin>>a不一样的是,getline并不忽略行开头的换行符,只要getline遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数将被置为空string。输入n之后有一回车,所以读入a之前遇到换行符,直接返回空串...
回复

使用道具 举报

千问 | 2011-12-21 01:59:19 | 显示全部楼层
试了一下,确实有LZ的问题。分析了一下问题出在输入完n之后。如果一开始正确输入了一个数值并读入到n,该行剩下的回车键之前的其他内容系统自动给了a,也可能输入数值n之后没有其他内容直接就是回车了,这是给a的就是空的了,而再起行输入的内容给了b了,所以不经意走掉一个a了。如果一开始输入的内容不是一个有效的数值形式,则n读入失败,n变成了0,之后的for循环条...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行