我看到了这段代码:
我看到了这段代码:
#include<stdio.h>
void main()
{
int x;
float t;
scanf("%f",&t);
printf("%d\n",t);
x=90;
printf("%f\n",x);
{
x=1;
printf("%f\n",x);
{
x=30;
printf("%f\n",x);
}
printf("%f\n",x);
}
printf("%f\n",x);
}
我瞥了一眼,以为它是一些未定义的输出,就像标准中引用的那样:
警告:printf使用它的第一个参数来决定后面有多少个参数以及它们的类型。如果参数不足或类型错误,它将变得混乱,并且您将得到错误的答案。
但是输出结果让我不能不再次考虑这个问题。
(输入给出的是23)。
23
0
23.000000
23.000000
23.000000
23.000000
23.000000
为什么总是23.00000?编译器实际上在尝试做什么?为什么不搞乱存储在x
中的值,而是打印t
的值?它有任何解释吗?因为似乎对于这个未定义的输出有一些定义(双关语意味着)。
编辑:
我正在使用32位机器上的gcc编译器。