getline的问题

C++语言 码拜 7年前 (2017-04-25) 1068次浏览
int main()
{
int m;
std::cin>>m;
//是不是应该在这里清空std::cin的缓存区呢?为什么?
while(m–)
{
std::string s;
getline(std::cin,s);
….

}
有些搞不清楚getline在这里为什么会出错(结果不对),看结果好像是getline把本人一开始给m赋值的换行符给用了,问一下这是为什么呢?
本人在上面标记的位置用了fflush(stdin)就是正常的。但fflush(stdin)是不是在某些编辑器里是未定义的?本人用这个答案提交上去是错误的。然后本人就想用cin.ignore( numeric_limits<streamsize>::max(), “\n”);来清空本人的std::cin。也加了头文件limits,但还是显示未定义。问一下是为什么呢?
解决方案

40

某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲,
但是并非全部编译器都要支持这个功能(linux 下的 gcc 就不支持),
原因是标准中根本没有定义 fflush(stdin)。
MSDN 文档里 也清楚地写着
fflush on input stream is an extension to the C standard(fflush 操作输入流是对 C 标准的扩充)。
用了limits头文件,还是未定义,是不是少了命名空间,例如using std::numeric_limits;
http://blog.csdn.net/kang99827765/article/details/50593839

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明getline的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)