1 回答
TA贡献883条经验 获得超454个赞
我觉得这几行代码有问题。
不过,我先说下关于 cin 的东西吧:
你输入的内容都在输入流中。cin >> 会读取输入流中的内容并存入后面的变量中,当然是按照变量的类型来格式化输入流中的内容。那么如果类型不匹配呢?
比如你这里 cin >> temp 需要存入浮点类型的 tmp,可你输入的不是数字,这会怎么样?
这会发生错误,cin 会在内部记录错误状态。一旦出错就无法再使用 cin 来读取输入了。错误状态可以通过调用 cin.clear() 来清除。 而且 cin 的状态默认可以作条件判断用。
if (!cin) 这里就是判断 cin 是否出错。cin 错误时相当于 false,所以当 cin 出错时会执行 if 中语句。
还有一点要说,当读取输入时出错,那些不正确的输入会原封不动地留在输入流中。
还用 cin >> tmp 举例。如果你输入 123回车,那没问题,123 被 cin 从输入流中读取走了(并存入123.0到tmp)。 可如果你输入 ab回车,这就出错了! 但是 'a' 'b' '\n' 却会原封不动流在输入流中。
那么一般处理输入出错可以这样:
先清除掉 cin 的错误状态,保证可继续使用 cin 读取:调用 cin.clear() 即可。
再处理掉输入流中留下的不正确的输入:这个代码里用循环调用 cin.get() 的方式来读取走它们。 解释一下,cin.get() 可以读取走输入流中的任意字符,并且返回读到的值。所以循环用 get() 来读...直到'\n' 就可以清掉输入流中上次回车之前的内容。
那么这几行代码应该就是处理输入出错的情形的。如果你输入没出错,就不会执行这个 if,所以你没看到对结果有影响。
但是!之所以说“应该”是因为我觉得它逻辑上有问题!
你可以对照我上面说的错误处理方式,看看这几行代码是不是无法实现这个目的?
- 1 回答
- 0 关注
- 1341 浏览
添加回答
举报