如果在输入int时输入一个单词会发生什么情况?
在使用正在读取的值之前,您需要检查读取操作的结果。 >>
操作符返回对正在读取的流的引用,并且该流包含状态信息以指示上次操作是成功还是失败。如果失败,被读取的变量的值是不确定的,所以不要使用它。
尝试这种情况:
int a;
if (cin >> a) // <-- same as: if (!cin.operator>>(a).fail())
{
// read successful, use the int as needed...
}
else
{
// read failed, do not use the int...
}
正确,你忘了给问题的答案 – 4pie0 2014-09-06 20:50:14
@ 0d0a:我确实回答了“什么会发生“问题 - '>>'会失败。我没有回答“将给予什么价值”的问题。我现在补充说。 – 2014-09-06 21:46:54
当用户输入不能被转换到可变的类型,CIN >>离开变量的值不变。你看到变量看起来像未初始化的,这是零。所以当你输入一个单词而不是一个整数时,变量的值是不变的,并且保持未初始化。
POD类型的局部变量未被初始化。它是零的事实是随机行为。这将是任何数据已经占用了变量正在使用的堆栈内存。 – 2014-09-06 21:48:36
这不是问题。
在C++中,WORD
通常是int
的子集。
所以完全WORD
valuerange容易被表示为int
随便看看这里:
WORD datatype in windows environments(这只是两个字节的值在这里,int
在比较宽的4个字节在大多数情况下)
,当然还有: Word size in linux
当然,这个答案是有点tongue舌
....你有没有尝试过,看看? – 2014-09-06 20:39:13
如果您担心这种情况,只需将所有内容输入为字符串,然后将其转换为所需的类型即可。 – Tracer 2014-09-06 20:40:08
@KyleStrand嗨,我试过了,结果为0.我想知道更详细的结果背后的机制;) – 2014-09-06 20:44:24