next up previous contents
Next: scanf 數值後字元問題處理 Up: 格式化輸入輸出 Previous: scanf 數值問題說明   Contents

scanf 數值後字元問題

  1. 將上節的 fstdio8.c 字串輸入改成「字元」,並印出其 ACSII code。
    [dywang@dyw219 zzz]$ vim fstdio9.c
    [dywang@dyw219 zzz]$ cat fstdio9.c 
    #include <stdio.h>
    
    main() {
    	int a;
    	char b;
    	printf("Enter a number: ");
    	scanf("%d", &a);
    	printf("a=%d\n", a);
    	printf("Enter a character: ");
    	scanf("%c", &b);
    	printf("b=%c\tACSII code=%d\n", b,b);
    }
    
  2. 編譯成功
    [dywang@dyw219 zzz]$ gcc -o fstdio9 fstdio9.c
    
  3. 執行結果:輸入 123 按下 Enter,還沒等到輸入「字元」,程式就印出字元及它的 ACSII code=10,ascii code 10 是鍵盤「Enter」這個控制鍵,它是非列印字元,所以輸出 b= 就換行了。
    [dywang@dyw219 zzz]$ ./fstdio9 
    Enter a number: 123
    a=123
    Enter a character: b=
    	ACSII code=10
    
  4. 如何解決這個問題?



De-Yu Wang 2019-11-14