c++ 我不知道我怎么能只在屏幕上显示一次消息错误[关闭]

anauzrmj  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(129)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
3天前关闭。
Improve this question
enter image description here
你好,我做了一个简单的计算器与开关句。当操作不同于(+,-,/,*)时,它会显示错误。
奇怪的是,当我输入例如aa。它显示2次错误消息。
我想知道是否有办法解决这个问题。
我试着为它创建一个布尔值,就像你在Java中使用信号量一样,你把一个信号量放进去。但很明显,

kokeuurv

kokeuurv1#

这里有两个可能的问题。
第一种情况是,您为操作提供了无效的给予输入。如果你给予两个字符作为输入(比如,aa),那么第一个流提取将读取其中的 first,注意它是无效的,并打印错误消息。
这将使第二个a仍然留在输入缓冲区中,以便在下一次迭代中读取,所以这一切都会再次发生。
第二个问题是当你试图提取一个整数时,你输入了一个无效的值(比如aa)。它不能被提取为整数,所以输入将留在输入缓冲区中,而0将被写入变量,同时流被设置为失败状态。
当循环随后迭代时,如果您尝试读取操作,它将失败,因为流处于失败状态。操作值将处于 indeterminate 状态,具有不确定的值。在C++中,以任何方式使用不确定的值都会导致 undefined behavior
常见的解决方案是将整行读入一个字符串,例如使用std::getline,然后尝试验证和解析这个字符串。
例如,对于操作,您可以检查以确保只输入了一个字符,然后检查该字符。
对于数字,您可以使用std::stoi将输入字符串转换为int值,并进行验证。

相关问题