2010-03-16 52 views
4

这似乎是不可思议:C++ CIN问题

int main(int argc, char* argv[]) { 

    cout << "function main() .." << '\n'; 

    char ch = 0; 
    double number_value=1.1; 

    cin >> ch; 
    cin.putback(ch); 

    cin >> number_value; 
    cout << "1 .. " << " " << cin.good() << " " << number_value << '\n'; 
    cin >> number_value; 
    cout << "2 .. " << " " << cin.good() << " " << number_value << '\n'; 

    return 0; 

} 

如果我输入以下内容:

7a 1 

我得到如下:

函数main()..

7a 1 
1 .. 1 7 
2 .. 0 0 

我明白了:

1 .. 1 7 

但为什么变量NUMBER_VALUE为0 cin.good()显示故障所以什么事都不会读,并从以前的分配在NUMBER_VALUE值将保持。我期望值为7.

+0

您可以使用std :: boolalpha将这些1和0转换为true和false。 – 2010-03-16 05:17:30

+1

请注意,'cin.good()'与'bool(cin)'不一样,在检查提取成功时你应该更喜欢后者。 'if(cin >> var)'这个常见的习惯用法也是这样。 – 2010-03-16 05:22:37

+0

你使用什么编译器? – 2010-03-16 05:32:28

回答

2

这就是我所期望的。随着我有得心应手的编译器,输出看起来是这样的:

function main() .. 
7a 
1 .. 1 7 
2 .. 0 7 

您可能已经发现你的编译器的标准库中的错误。

+0

其次用MinGW输出... 函数main()\ n 7a 1 \ n 1 .. 1 7 \ n 2 .. 0 7 \ n – 2010-03-16 05:14:12

+0

不需要改变值:22.2.2.1.2/1“如果发生错误,val将保持不变;否则将设置为结果值。” – 2010-03-16 05:21:31