解决 getline() 中的输入跳过问题
在程序中使用 getline() 函数时,了解一个常见问题非常重要问题:输入数字后立即得到后续输入。出现此行为的原因是输入数字后,换行符留在输入流中。
让我们看一个具体示例:
int number; string str; int accountNumber; cout << "Enter number: "; cin >> number; cout << "Enter name: "; getline(cin, str); cout << "Enter account number: "; cin >> accountNumber;
执行时,此代码的行为异常。输入号码后,它立即输出“输入帐号”,而不允许用户使用 getline(cin, str) 输入姓名。
这种行为的原因在于 getline() 读取输入的方式。它读取整行,包括换行符。当您输入数字并按 Enter 键时,换行符将保留在输入流中。当调用 getline() 时,它会读取此换行符并返回,而不等待任何其他输入。这会导致程序跳过“输入名称:”提示。
要解决此问题,您可以在调用 getline( 之前使用 std::ws 操纵器跳过任何前导空格,包括换行符)。以下是更新后的代码:
cout << "Enter number: "; cin >> number; cout << "Enter name: "; cin >> std::ws; getline(cin, str); cout << "Enter account number: "; cin >> accountNumber;
通过此更改,程序将在“输入名称:”提示处正确暂停,并允许用户在继续之前输入名称。
以上是为什么使用'cin”后'getline()”会跳过输入?的详细内容。更多信息请关注PHP中文网其他相关文章!