为什么这个C程序不能编译?

时间:2014-08-16 12:06:42

标签: c

#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);
}

为什么需要括号?

3 个答案:

答案 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);