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