next up previous contents
Next: 實機練習題 Up: 格式化輸入輸出 Previous: scanf 數值後字元問題   Contents

scanf 數值後字元問題處理

  1. 為解決 fstdio9.c 的問題,必須在輸入數字後清除緩衝區,很多資料使用 fflush(stdin) 函式清除標準輸入,但測試沒作用?為解決此問題,若輸入數字後,要再輸入字元,可在輸入字元的格式前加 \n 換行符號。
    [dywang@dyw219 zzz]$ vim fstdio10.c
    [dywang@dyw219 zzz]$ cat fstdio10.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("\n%c", &b);
    	printf("b=%c\tACSII code=%d\n", b,b);
    }
    
  2. 編譯成功
    [dywang@dyw219 zzz]$ gcc -o fstdio10 fstdio10.c
    
  3. 執行結果:輸入 123 按下 Enter,出現輸入字元的提示,再輸入字元 w,程式印出字元 w 及它的 ACSII code=119。
    [dywang@dyw219 zzz]$ ./fstdio10 
    Enter a number: 123
    a=123
    Enter a character: w
    b=w	ACSII code=119
    
  4. 執行結果:輸入 123w 按下 Enter,一樣直接印出字元 w 及它的 ACSII code=119。
    [dywang@dyw219 zzz]$ ./fstdio10 
    Enter a number: 123w
    a=123
    Enter a character: b=w	ACSII code=119
    



De-Yu Wang 2019-09-19