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