我无法为以下代码的输出给出适当的理由。有谁能够帮助我。
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和%cforchar参数
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声明中。