为什么这个返回值?C++int/char混淆



使用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 << "cmn ";
else if (unit == 'c')
    cout << length << "cm == " << length/cm_per_inch << "inn";
else
    cout << " I don't know a unit called " << unit << ".n";
}

您不初始化unit,因此如果输入失败,它将包含它碰巧具有的任何随机、无意义的值。您的输入代码都没有测试它是成功还是失败,但您可以通过任何一种方式访问unit的值。因此,如果输入失败,结果将是不可预测的垃圾。

尝试更改:

 char unit;

 char unit = '?';

您的问题之一是您没有初始化unit变量,因此我们不知道当您的输入失败时它会打印出什么。

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

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

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

最新更新