2014-09-06 47 views
1

我有问题。假设代码如下:如果在输入int时输入一个单词会发生什么情况?

int a; 
    cin>>a; 

如果我输入一个单词而不是一个整数会发生什么? a会给予什么价值?

在此先感谢。

+2

....你有没有尝试过,看看? – 2014-09-06 20:39:13

+1

如果您担心这种情况,只需将所有内容输入为字符串,然后将其转换为所需的类型即可。 – Tracer 2014-09-06 20:40:08

+0

@KyleStrand嗨,我试过了,结果为0.我想知道更详细的结果背后的机制;) – 2014-09-06 20:44:24

回答

4

在使用正在读取的值之前,您需要检查读取操作的结果。 >>操作符返回对正在读取的流的引用,并且该流包含状态信息以指示上次操作是成功还是失败。如果失败,被读取的变量的值是不确定的,所以不要使用它。

尝试这种情况:

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... 
} 
+0

正确,你忘了给问题的答案 – 4pie0 2014-09-06 20:50:14

+0

@ 0d0a:我确实回答了“什么会发生“问题 - '>>'会失败。我没有回答“将给予什么价值”的问题。我现在补充说。 – 2014-09-06 21:46:54

1

当用户输入不能被转换到可变的类型,CIN >>离开变量的值不变。你看到变量看起来像未初始化的,这是零。所以当你输入一个单词而不是一个整数时,变量的值是不变的,并且保持未初始化。

+0

POD类型的局部变量未被初始化。它是零的事实是随机行为。这将是任何数据已经占用了变量正在使用的堆栈内存。 – 2014-09-06 21:48:36

0

这不是问题。

在C++中,WORD通常是int的子集。

所以完全WORD valuerange容易被表示为int

随便看看这里:

WORD datatype in windows environments(这只是两个字节的值在这里,int在比较宽的4个字节在大多数情况下)

,当然还有: Word size in linux

当然,这个答案是有点tongue舌

相关问题