当类型不匹配时理解 cin 的无限循环
使用 cin 函数读取输入时,如果预期的输入可能会发生无限循环是数字,但改为输入字符。出现这种情况是因为cin遇到非数字输入时失败,进入fail状态,导致无法提示进一步输入。
死循环的原因
中提供的代码:
unsigned long ul_x1, ul_x2; while (1) { cin >> ul_x1 >> ul_x2; cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
如果提供了无效的输入,cin 会失败并保持该状态。结果,循环永远不会进入 cin 再次读取输入的块,从而导致无限循环。
防止无限循环
要避免此问题,可以验证使用 cin 的失败状态输入:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
替代:基于字符串验证
对于更复杂的验证,在执行基于字符串的特定检查之前将输入读取为字符串可能会很有帮助,以确保其符合预期格式。
以上是为什么 `cin` 会导致类型不匹配的无限循环?的详细内容。更多信息请关注PHP中文网其他相关文章!