我无法为以下代码的输出给出适当的理由。有谁能够帮助我。
int main()
{
int i;
char ch;
scanf("%c",&i);
scanf("%d",&ch);
printf("%d\n%c",i,ch);
return 0;
}
输入输出:
input:
a
45
output:
0
-
您正在将 a 读int
入 a char
。假设sizeof(int) != sizeof(char)
,这将导致scanf
超出结尾的写入,ch
并产生未定义的后果。
您应该使用参数的%i
格式说明符int
和%c
forchar
参数
int main()
{
int i;
char ch;
scanf("%c",&ch);
scanf("%d",&i);
printf("%d\n%c",i,ch);
return 0;
}
不要对scanf
或说谎printf
。没有什么好的结果。
在这种情况下,您试图将 4 个字节填充到 1 的空间中——这显然不起作用,无论您挤压多少。您的程序没有崩溃的事实纯粹是运气。
这是未定义的行为。您试图通过告诉编译器弹出和推送不同的东西来混淆编译器,它应该分别在printf
和scanf
声明中。