scanf函数会导致运算符出现任何逻辑问题吗?

时间:2019-01-24 09:16:19

标签: c operators scanf

我认为描述问题的最好方法是实际显示此简单代码的输出: Image contains code and output

#include<stdio.h>
int main()
{
int a=5,b;

b=a-++a;
printf("%d %d",a,b);

return 0;
}

如您所见,返回的值在逻辑上是正确的。 ++ a将a的值增加到6。然后b = 6-6 = 0。

但是,当我使用scanf将'a'的值作为用户输入时,会发生以下情况: Image contains code and output

#include<stdio.h>
int main()
{
int a,b;
scanf("%d",&a);
b=a-++a;
printf("%d %d",a,b);

return 0;
}

结果不应该相同还是我在这里遗漏了一些简单的东西吗?

1 个答案:

答案 0 :(得分:0)

a - ++a格式的值不确定,因为参数'-'的执行顺序是不确定的。

在第一种情况下,编译器知道 a 的值,因此可以优化代码,最后在编译时就知道了所有内容,而在第二种情况下则不是。

在编译时或执行时计算的值不同的事实是a - ++a格式的结果,其结果未定义。