实践
#include <stdio.h>
main()
{
char a;
printf("\nEnter Anything = ");
scanf("%c",&a); <Line 1>
printf("\n%d",a);
printf("\n%c",a);
}
Output 1 : Enter Character = 5
53
5
Output 2 : Enter Character = a
97
a
该程序完全由书执行。
新的
#include <stdio.h>
main()
{
char a;
printf("\nEnter Character = ");
scanf("%d",&a); <Line 1>
printf("\n%d",a);
printf("\n%c",a);
}
Output 1 : Enter Character = 5
5
♣
Output 2 : Enter Character = a
0
这是与
Practice.c
相同的程序,只是略有变化。这不是问题,但我在程序的%d
所指示的行中错误地键入了%c
而不是Line 1
。我的这个错误产生了2个非常不同的输出。背后的确切原因是什么? 最佳答案
在ASCII 32
下,所有字符均为不可打印字符。在第二个代码中,您正在读取int
,然后尝试打印不可打印的等效字符。
对于第二个输入a
,scanf
不会读取此字符并将其保留在缓冲区中,因为它期望整数而不是字符。变量a
未初始化,您现在正在访问未初始化的变量。这会调用未定义的行为。