首页  >  文章  >  后端开发  >  为什么我的 C 输入循环跳过 getline() 调用?

为什么我的 C 输入循环跳过 getline() 调用?

Linda Hamilton
Linda Hamilton原创
2024-11-15 13:24:02144浏览

Why is My C   Input Loop Skipping getline() Calls?

C 输入循环中 getline() 的意外行为

在尝试从控制台获取用户输入时,开发人员遇到了令人费解的问题getline() 函数的问题。与预期相反,程序在第一次调用 getline() 后未能等待输入,立即继续进行后续调用。

提供的代码片段说明了有问题的部分:

getline(cin, inputString);
getline(cin, inputString);

此行为是由于同一输入循环中 getline() 和输入运算符 (>>) 的组合引起的。而>>跳过前导空格,它无法消耗尾随换行符。当调用 getline() 时,换行符保留在输入缓冲区中,并被解释为下一个输入的一部分。

解决方案:

解决此问题,必须始终使用 getline() 或 >>整个输入循环。如果所有输入都是数字或者可以有效地解析,>>>是一个合适的选择。但是,如果涉及字符串或混合数据类型,则应使用 getline() 并手动从输入字符串中提取数值。

代码重构:

对所有输入使用 getline():

getline(cin, inputString);
getline(cin, inputString);
getline(cin, inputUInt);
getline(cin, inputUInt);
getline(cin, inputDouble);

或者,使用 >>对于所有数字输入:

cin >> inputString;
cin >> inputString;
cin >> inputUInt;
cin >> inputUInt;
cin >> inputDouble;

以上是为什么我的 C 输入循环跳过 getline() 调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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