处理 C 中不正确的数据类型输入
开发 C 程序时,必须确保对用户输入的稳健处理,尤其是在期望特定的情况下数据类型。偏离预期类型的输入可能会导致程序故障,例如无限循环。
让我们考虑这样一个场景:您的程序提示用户输入整数,但他们错误地输入了字符。如果程序无法处理这个无效输入,就会进入无限循环,尽管接收到一个字符,却不断要求输入一个整数。
这个问题的根本原因是 std::cin 的“bad input”设置" 遇到错误输入时进行标记。要解决此问题,需要清除此标志并丢弃输入缓冲区中的错误输入。
以下代码片段说明了如何实现此目的:
while (std::cout << "Enter a number" && !(std::cin >> num)) { std::cin.clear(); // Clear bad input flag std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard input std::cout << "Invalid input; please re-enter.\n"; }
在此代码中,只要输入失败(即没有读取到任何字符),while 循环就会执行。在循环内,cin.clear() 清除错误输入标志,cin.ignore() 丢弃缓冲区中的错误输入。然后,程序会提示用户重新输入有效数字。
或者,您可以获取字符串形式的输入,并使用 std::stoi 或其他允许转换验证的方法将其转换为整数。这种方法可以检查转换结果并相应地处理无效输入。
以上是如何防止C语言中数据类型输入错误导致的无限循环?的详细内容。更多信息请关注PHP中文网其他相关文章!