为什么这个回报值? C ++ int / char混乱

时间:2014-10-21 19:03:47

标签: c++ type-conversion

使用GNU GCC编译器4.8.1。这个非常简单的程序让我陷入困境。当提示输入时,它需要第一个值的整数和第二个值的字符。如果我改为输入一个字符或任何文本字符串而不是整数,它总是返回一个字符为'u'的单位。

任何人都可以解释为什么会这样吗?

int main()
{
const double cm_per_inch = 2.54;
int length = 1;
char unit;
cout << "Please enter a length followed by a unit (c or i): ";
cin >> length;
cin >> unit;
if (unit == 'i')
    cout << length << "in == " << cm_per_inch * length << "cm\n ";

else if (unit == 'c')
    cout << length << "cm == " << length/cm_per_inch << "in\n";

else
    cout << " I don't know a unit called " << unit << ".\n";
}

2 个答案:

答案 0 :(得分:4)

你没有初始化unit,所以如果输入失败,它包含它碰巧有的任何随机,无意义的值。您的输入代码都没有测试是否成功或失败,但无论如何都可以访问unit的值。因此,如果输入失败,结果是不可预测的垃圾。

尝试更改:

 char unit;

 char unit = '?';

答案 1 :(得分:3)

您的一个问题是您没有初始化unit变量,因此我们不知道输入失败时会打印出来的内容。

您应该在每次输入后检查错误,然后处理它们:

if (cin >> length)
{
  if (cin >> unit)
  {
    // ...
  }
}

如果遇到非整数字符,则输入整数将失败。