#include <iostream>
using namespace std;
int main(int argc, char** argv) {
double a;
double b;
cin >> a,b;
cin.ignore();
cout << "a= "<< a << " b=" << b;
return 0;
}
为什么b的值在这种情况下是1.4822e-323?
答案 0 :(得分:4)
cin >> a,b;
使用臭名昭着的comma operator,它在C ++中具有最低precedence。基本上,上述陈述评估为:
(cin >> a) , b;
因此,正在评估第一个(cin >> a)
,结果是cin
的输入被写入a
,并返回istream
。然后,在后者istream
和b
之间调用逗号运算符,这实际上会丢弃第一个操作数,因此语句的最终结果是b
,因此保持未初始化。 / p>
如@ IVlad的回答所述,阅读a
和b
的正确方法是
cin >> a >> b;
答案 1 :(得分:3)
这是因为这一行:
cin >> a, b;
不代表read a and read b
。它更接近于此:
cin >> a;
b;
要读取这两个值,您需要执行cin >> a >> b
。 b
等于您获得的值或多或少是随机的,因为您没有初始化b
,也没有真正读过它。