C++程序中getline函数未按预期工作的技术咨询
问题分析与解决
问题根源
使用cin >> choice读取整数时,输入结束后按下的回车键(换行符\n)会残留在输入缓冲区中。后续调用getline(cin, name)时,getline会将这个残留的换行符视为一个空行,直接完成第一次读取,随后程序立刻执行到密码提示语句,导致两个提示挤在同一行,且用户名输入被跳过。
解决方案
在循环结束后、调用getline之前,清空输入缓冲区中残留的换行符。可以使用cin.ignore()方法,为了确保完全清除到换行符,建议使用:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
使用此方法需要包含<limits>头文件。
修正后的代码
#include <iostream> #include <string> #include <limits> // 必须包含此头文件 using namespace std; int main() { int choice; while(choice != 2){ cin >> choice; } // 清除输入缓冲区中的残留换行符 cin.ignore(numeric_limits<streamsize>::max(), '\n'); string name; string pass; cout << "Username: "; getline(cin, name); cout << "Password: "; getline(cin, pass); // 可选:验证输入内容 cout << "\n输入的用户名:" << name << endl; cout << "输入的密码:" << pass << endl; return 0; }
内容的提问来源于stack exchange,提问作者Adnan Ullah Khan
相关产品推荐
相关产品推荐

