为啥scanf函数无法将‘;’读取为单个字符

为什么scanf函数无法将‘;’读取为单个字符?
看以下程序
 #include <stdio.h>
int main()
{
   char a[3];
   scanf("%c",&a[0]);
   printf("%c\n",a[0]);
   puts(a);

    return 0;
}

运行程序后输入分号  ;
输出结果为两个问号
求详解
------解决方案--------------------
char表示的范围里,没有中文的";"这个字符。
------解决方案--------------------
什么情况下输入的字符呢?
------解决方案--------------------
a没有初始化。

中文的分号,ASCII表示不了。
------解决方案--------------------
非ASCII字符都是双字节表示
------解决方案--------------------
scanf, wscanf
Read formatted data from the standard input stream.

int scanf( const char *format [,argument]... );

int wscanf( const wchar_t *format [,argument]... );

Routine Required Header Compatibility 
scanf <stdio.h> ANSI, Win 95, Win NT 
wscanf <stdio.h> or <wchar.h> ANSI, Win 95, Win NT 


For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version 
LIBCMT.LIB Multithread static library, retail version 
MSVCRT.LIB Import library for MSVCRT.DLL, retail version 


Return Value

Both scanf and wscanf return the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. The return value is EOF for an error or if the end-of-file character or the end-of-string character is encountered in the first attempt to read a character.

Parameters

format

Format control string

argument

Optional arguments

Remarks

The scanf function reads data from the standard input stream stdin and writes the data into the location given by argument. Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. If copying takes place between strings that overlap, the behavior is undefined.

wscanf is a wide-character version of scanf; the format argument to wscanf is a wide-character string. wscanf and scanf behave identically otherwise. 

Generic-Text Routine Mappings

TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined 
_tscanf scanf scanf wscanf 


For more information, see Format Specification Fields — scanf functions and wscanf Functions. 

Example

 /* SCANF.C: This program uses the scanf and wscanf functions
  * to read formatted input.
  */

#include <stdio.h>

void main( void )
{
   int   i, result;
   float fp;
   char  c, s[81];
   wchar_t wc, ws[81];

   printf( "\n\nEnter an int, a float, two chars and two strings\n");

   result = scanf( "%d %f %c %C %s %S", &i, &fp, &c, &wc, s, ws );
   printf( "\nThe number of fields input is %d\n", result );
   printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);

   wprintf( L"\n\nEnter an int, a float, two chars and two strings\n");

   result = wscanf( L"%d %f %hc %lc %S %ls", &i, &fp, &c, &wc, s, ws );
   wprintf( L"\nThe number of fields input is %d\n", result );
   wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}


Output

Enter an int, a float, two chars and two strings
71
98.6
h
z