C++中连续调用两次getline()无法正常输入用户名是什么原因?
问题根因
你遇到的无法输入用户名的问题和连续调用两次getline无关,问题出在之前cin >> select的操作残留了换行符在输入缓冲区:
showMenu里的cin >> select只会提取输入流中的数字字符,用户输入完数字按下回车产生的\n换行符会完整留在输入缓冲区中,不会被该操作读取。- 进入
showRegister函数后,第一个getline(cin, user)会从当前输入流的位置开始读取,直到碰到第一个\n就停止,同时会把这个\n从缓冲区丢弃。此时缓冲区第一个字符就是之前残留的换行符,所以getline会直接返回一个空字符串赋值给user变量,看起来就像程序跳过了用户名输入步骤,直接走到了密码输入环节。 - 你添加的
cin.ignore()操作正好把缓冲区里残留的换行符丢弃了,后续的getline就能正常读取用户输入的内容。
通用规避方案
如果代码需要交替使用cin >>和getline,可以统一在cin >>读取完成后加一行代码:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
这行代码会把缓冲区里直到换行符为止的所有残留内容全部清空,避免后续getline读取到无效的空内容,注意使用前需要引入<limits>头文件才能调用numeric_limits。
内容的提问来源于stack exchange,提问作者trangan
相关产品推荐
相关产品推荐

