輸出入函數Input/Output
初寫:2005.04.13, 更新日期:2024.10.05
 
作者:曾聖超老師
 
一個程式,要能有輸入,才會有趣。
這是電玩遊戲比看電視影片受歡迎的原因。
正是遊戲有輸入的機制,可以依照玩家的輸入,作出相對應反應。

程式撰寫者可以在程式中,直接設定數值給變數;
也可以設計在執行時,讓使用者輸入來決定變數的數值,
這種設計是為輸入。

在一般標準(ANSI) C 函式裡,
提供了一個定義輸出入函式的檔 stdio.h (Standard Input/Output ),
專門處理鍵盤、螢幕、檔案和印表機的輸出入,
讓使用者以呼叫方式輕鬆使用,不必去辛苦撰寫與溝通硬體的低階工作。
  • C語言常用輸入/輸出函式如下:
    • 輸出入函式,如: scanf( )、printf( )
    • 單一字元輸出入函式,如: getchar( )、putchar( )
    • 字串輸出入函式,如: fgets( )、puts( )

    這先以簡單的scanf()、printf(),帶同學們來認識輸出入的用法!


  • printf()  輸出函式

    • 語法格式:
      printf("欲顯示的字串");
      printf("欲顯示的字串 或 對應變數型態之參數", 變數1, 變數2, ...);

    • printf 變數輸出對應參數表:
      資料型態與printf對應參數表 (使用gcc2.95.3版編譯所示)
      資料型態 長度 數值範圍 精準
      位數
      對應參數
       char  1byte  -128 ~ +127     %c
       int  4bytes  -21億多 ~ 21億多    %d
       long int  4bytes  -21億 ~ 21億    %d
       unsigned int  4bytes  0 ~ 42億    %u
       long long int  8bytes  -9.2x1018~9.2x1018    %lld
       float  4bytes  10-38 ~ 10+38  7  %f
       double  8bytes  10-308 ~ 10+308  15  %lf
       long double  12bytes  10-4932 ~104932  19  %Lf, %llf

      轉換參數 輸出資料 備註
       %c  字元  char
       %d  10進位[有號]整數  int
       %u  10進位[正]整數  int
       %f  浮點數  float, double
       %e 或 %E  浮點數(以指數表示)  float, double
       %g 或 %G  浮點數(指數或實數表示)
       指數<-4 或 指數>6 %e輸出,
       其他以%f輸出.
       float, double
       %o  8進位[正]整數  int
       %p  指標  
       %s  字串  char[]
       %x 或 %X  16進位[正]整數  int

    • 控制字元
      控制字元 功能說明 備註
       \a  噹 (Ring PC bell)  
       \b  後退一格 (back space) [<-]
       \f  換頁  
       \n  換行 [Enter]
       \r  回此列 開頭 [Home]
       \t  往右跳8空格 (Tab) [Tab]
       \,  印出 '  
       \"  印出 "  

    • 範例1
      printf 輸出函式練習:
      #include <stdio.h>
      main( )
      {
           int x,z;
           float y;
           x=3;
           y=170.5;
           z=2;

           printf(" There are %d people in my family!\n", x );
           printf(" My father is  %d cm high and %d-th in our family!\n", y , z );
           printf(" \n");
      }
      執行後,結果為何?
      請問如何修正對應參數,讓身高可以正確顯示?

    • 範例2:
      #include <stdio.h>
      main( )
      {
           int x=3;
           float y=170.5;
           int z=2;

           printf(" There are %d people in my family!\n", x );
           printf(" I am %f cm tall and was the %d-th tall in my family!\n", y , z );
           printf(" \n");
      }
      請問輸出結果為何?
      請試試將x, y, z值更改,觀察輸出結果。
      請試試將 %f 改成%.2f,請問.2的作用。


  • scanf() 輸入函式
    • 語法格式:(△表示空一格)
      scanf("△變數對應 輸入參數列", &變數1, &變數2,...);
    • 說明:
      1. 變數對應參數列順序要對應變數串列,且對應參數型態需與變數型態一致。
      2. 參數串列前,可空一格,會使 scanf 讀取時忽略空白的字元。
      3. 變數前需加上 & 符號,scanf 定義使用 & 符號來取變數的位址。
      4. 雙引號內不能加入字串。
      例如:

    • 常用的對應輸出參數(與printf相似),如下表:
      轉換參數 輸入資料 資料型態
       %c  字元  char
       %d  10進位[有號]整數  int
       %f  單精倍浮點數  float
       %lf  雙精倍浮點數  double
       %lld  長長[有號]整數  long long int
       %s  字串  char[]
       %o  8進位[正]整數  int
       %x  16進位[正]整數  int

    • 範例1(單一變數輸入、輸出):
      #include <stdio.h>
      main( )
      {
            int x=3.14;
            scanf(" %d", &x);
            printf("x= %d \n", x);
      }
    • 執行後,請輸入2.456,觀察結果為何?
    • 執行後,請輸入7.213,觀察結果為何?
    • 請問,如何讓 x 能正確顯示出小數點以下部分?
    • 如果需要提示使用者,程式碼應如何修正?

    • 練習1 (二變數分次輸入,一次輸出):
      Input x:
      Input y:

      x= , y= .
    • 請將上述程式修改,先輸入x, 再輸入y,
    • 之後,再將 x, y 的值一次印出!

    • 範例2 (多變數一次輸入、輸出):
      #include <stdio.h>
      main( )
      {
        int x, y;
        scanf(" %d %d", &x, &y);
        printf("x= %d ", x);
        printf("y= %d \n", y);
      }
    • 請輸入3△5 (△表示空一格),觀察執行結果?
    • 請輸入5△△△7 (△表示空一格),觀察執行結果?
    • 請輸入5 7 (表示按Enter),觀察執行結果?



    • 範例3 觀念釐清 (二變數分次輸入,一次輸出):
      試著執行看看結果,當執行時,你 "介面上" 看到的是x, y,
      但程式中,你運用的變數是a, b!



  • 一致性
    簡言之,一個變數,由宣告讀入計算或使用輸出
    變數在上述過程中,所使用的資料型態,都必須一致才行。

參考資料: