2

在下面的第一个程序中没有错误。但是对于第二个程序有一个错误。为什么呢?

第一个程序:

#include<stdio.h>
void main()
{
int k=8;
int m=7;
k<m?k=k+1:m+1;
printf("%d",k);
}

第二个程序:

#include<stdio.h>
void main()
{
int k=8;
int m=7;
k<m?k=k+1:m=m+1;
printf("%d",k);
}
4

2 回答 2

5

条件运算符的优先级高于赋值运算符。您需要额外的括号才能获得所需的优先级。

k < m? k = k + 1 : m = m + 1;

被评估为

((k < m) ? (k = k + 1) : m) = m + 1;

添加括号以获得正确的优先级:

(k < m) ? (k = k + 1) : (m = m + 1);
于 2012-07-16T10:37:32.033 回答
1

它没有错误。两个程序都给出了正确的输出 8。

于 2012-07-16T10:32:26.973 回答