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

scanf 數值問題說明

  1. scanf 會找到一個非空白的字元後,再讀入數值,持續到非數字內容為止。後面的非數字字串不是不見,而是留在緩衝區。
  2. 在上節的 fstdio7.c 加入字串輸入並印出
    [dywang@dyw219 zzz]$ vim fstdio8.c
    [dywang@dyw219 zzz]$ cat fstdio8.c 
    #include <stdio.h>
    
    main() {
    	int a;
    	char b[10];
    	printf("Enter a number: ");
    	scanf("%d", &a);
    	printf("a=%d\n", a);
    	printf("Enter a string: ");
    	scanf("%s", &b);
    	printf("b=%s\n", b);
    }
    
  3. 編譯成功
    [dywang@dyw219 zzz]$ gcc -o fstdio8 fstdio8.c
    
  4. 執行結果:輸入 482abc 按下 Enter,還沒等到輸入「字串」,程式就將數字 482 後的字串 abc 也讀取並印出,足以證明數字後的字串並沒有不見,而是放在緩衝區。
    [dywang@dyw219 zzz]$ ./fstdio8
    Enter a number: 482abc
    a=482
    Enter a string: b=abc
    
  5. 執行結果:輸入 123 按下 Enter,再輸入「字串」abc,輸出正常。
    [dywang@dyw219 zzz]$ ./fstdio8
    Enter a number: 123
    a=123
    Enter a string: abc
    b=abc
    
  6. 如果換成 scanf 數字後,再 scanf 字元,結果會怎樣?



De-Yu Wang 2019-09-19