使用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";
}
答案 0 :(得分:4)
你没有初始化unit
,所以如果输入失败,它包含它碰巧有的任何随机,无意义的值。您的输入代码都没有测试是否成功或失败,但无论如何都可以访问unit
的值。因此,如果输入失败,结果是不可预测的垃圾。
尝试更改:
char unit;
到
char unit = '?';
答案 1 :(得分:3)
您的一个问题是您没有初始化unit
变量,因此我们不知道输入失败时会打印出来的内容。
您应该在每次输入后检查错误,然后处理它们:
if (cin >> length)
{
if (cin >> unit)
{
// ...
}
}
如果遇到非整数字符,则输入整数将失败。