首页 >后端开发 >C++ >为什么使用'cin”后'getline()”会跳过输入?

为什么使用'cin”后'getline()”会跳过输入?

Barbara Streisand
Barbara Streisand原创
2024-12-08 19:21:10844浏览

Why Does `getline()` Skip Input After Using `cin`?

解决 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn