next up previous contents
Next: 實機練習題 Up: 標準輸入與輸出 Previous: 字串   Contents


標準輸入緩衝區

  1. 範例:若將 stdio1.c 及 stdio2.c 的字元與字串輸入連續執行,結果為何?
    [dywang@dyw219 zzz]$ vim stdio3.c 
    [dywang@dyw219 zzz]$ cat stdio3.c
    #include <stdio.h>
    
    main () {
    	char c;
    	char str[100];
    
    	printf( "Enter a character: ");
    	c = getchar( );
    	printf( "You entered: " );
    	putchar(c);
    	printf( "\n" );
    	printf( "Enter a string: ");
    	//gets( str );
    	fgets( str, 100, stdin );
    	printf( "You entered: " );
    	puts(str);
    }
    
  2. 編譯
    [dywang@dyw219 zzz]$ gcc -o stdio3 stdio3.c
    
  3. 執行結果:輸入字元 A 後按 Enter,沒有等到再輸入字串,程式就結束。
    [dywang@dyw219 zzz]$ ./stdio3
    Enter a character: A
    You entered: A
    Enter a string: You entered:
    
  4. 執行結果:輸入字元 "A qwe rty" 後按 Enter,顯示輸入字串的字串是 " qwe rty",也就是鍵盤輸入都儲存在暫存區,等到按下 Enter 後 getchar 只讀第一個字元, fgets 則讀取後面的字串。
    [dywang@dyw219 zzz]$ gcc -o stdio3 stdio3.c
    [dywang@dyw219 zzz]$ ./stdio3
    Enter a character: A qwe rty
    You entered: A
    Enter a string: You entered:  qwe rty
    
  5. 解決方式: putchar 一個字元後,用 11.6 while 空迴圈,直到換行符號。



De-Yu Wang 2019-09-19