#include<stdio.h>
int main()
{
int a=10,b;
a>=5?b=100:b=200;
printf("%d",b);
}
错误是什么?
它的工作原理如下:
#include<stdio.h>
int main()
{
int a=10,b;
a>=5?(b=100):(b=200);
printf("%d",b);
}
为什么需要括号?
答案 0 :(得分:5)
分配具有最低优先级,您希望这样做:
a >=5 ? (b=100) : (b=200);
您的原始表达具有以下含义:
(a >= 5 ? b = 100 : b) = 200;
在C中,三元运算符?:
不返回左值,因此它不能将{200}分配给?:
的结果。那不符合你的预期。
以这种方式设置运算符优先级,使表达式为:
b = a >= 5 ? 100 : 200;
时
b = (a >= 5 ? 100 : 200);
而不是
(b = a) >= 5 ? 100 : 200;
答案 1 :(得分:1)
如果出现编译错误,您希望如何打印?
检查以下代码。
#include<stdio.h>
void main()
{
int a=10,b;
a>=5?(b=100):(b=200);
printf("%d",b);
}
答案 2 :(得分:-1)
a>=5?b=100:b=200;
可以写成:
b=(a>=5)?100:200;
另外,
printf("%d",b);
应该是
printf("%d\n",b);
\n
强制stdout
输出缓冲区刷新。
或者,您也可以打印到无缓冲的stderr
(在大多数实现中)。
fprintf(stderr, "hello"); //will print immediately, even if \n is not there
同样,要立即打印,您也可以这样做:
printf("%d\n",b);
fflush(stdout);
如果你在linux中,要完全禁用缓冲:setbuf(stdout, NULL);