(C++)帮帮看看这里怎么错了!

来源:百度知道 编辑:UC知道 时间:2024/09/23 14:27:41
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
float num1,num2;//,result;
char oper;
cout<<"Enter like this:<number oper number> "<<endl;
cin>>num1>>oper>>num2;
switch(oper)
{
case'+':cout<<num1<<'+'<<num2<<'='<</*result=*/num1+num2<<endl;break;
case'-':cout<<num1<<'-'<<num2<<'='<</*result=*/num1-num2<<endl;break;
case'*':cout<<num1<<'*'<<num2<<'='<</*result=*/num1*num2<<endl;break;
case'/':cout<<num1<<'/'<<num2<<'='<</*result=*/num1/num2<<endl;break;
default:cout<<"Please Enter RIGHT!!"<<endl;break;
}
return 0;
}

为什么我这里用resu

这是个典型的操作符优先级问题。

case '+':
cout << num1 << '+' << num2 << '=' << result = num1 + num2 << endl;
break;
赋值操作符 "=" 的优先级是第 16 组,左移操作符 "<<" 的优先级是第 7 组,重载不改变操作符优先级,所以 "<<" 的优先级高于 "="。
上面那句话实际是这样:
(cout << num1 << '+' << num2 << '=' << result) = (num1 + num2 << endl);
可是 std::endl 不接受 float 参数,也就无法给左边赋值,所以出错。

在声明 result 的前提下,加个括号就行了:
... << (result = num1 + num2) << endl;

哪里用result ?

不那能那样用.哪里有又是赋值又是要输出的.如果你在这里只想用个result之类的单个变量.你可以把语句放到上边去.比如说在前边这样写
result1=num1+num2;
result2=num1+num2;
result3=num1+num2;
result4=num1+num2;
然后可以在后边输出时只写个result1,result21,result3,result4

要加上括号,否则C++编译器会无法正确辨别当前表达式(因为是流输出)。

代码改为以下形式,Dev-C++ 4.9.9.2 编译通过。

----------------------

……
float num1,num