实践


#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,然后尝试打印不可打印的等效字符。

对于第二个输入ascanf不会读取此字符并将其保留在缓冲区中,因为它期望整数而不是字符。变量a未初始化,您现在正在访问未初始化的变量。这会调用未定义的行为。

10-04 10:50
查看更多