王智祥  著 第四章 基本輸出與輸入功能 4-1 printf()  輸出函數 4-2 scanf()  輸入函數  4-1-1  格式化字串簡介 4-2-1 getchar()  函數與      putchar()  函數 4-2-2  getche()  函數與       getch()  函數 4-2-3 kbhit()  函數 4-1-2  輸出參數格式 4-3  上機實習課程
4-1 printf()  輸出函數  4-1 printf()  輸出函數 P 4-2 下面  printf()  函數會將指定的文字輸出到標準輸出設備(螢幕), printf()  函數可以配合格式指定碼( format specifier ),來輸出指定格式的變數或數值內容。 printf()  函數的原型宣告如下: printf(char*  格式化字串 , 引數列 );
4-1-1  格式化字串簡介 (1) 4-1 printf()  輸出函數 P 4-2 格式指定碼 說          明 %c 輸出字元 %d 輸出十進位數 %o 輸出八進位數 %x 輸出十六進位數,超過 10 的數字以大寫字母表示,例如 0xff %X 輸出十六進位數,超過 10 的數字以大寫字母表示,例如 0xFF %f 輸出浮點數 %e 使用科學記號表示法,例如 3.14e+05 %E 使用科學記號表示法,例如 3.14E+05( 使用大寫 E) %s 輸出字串
4-1-1  格式化字串簡介 (1) 4-1  printf() 輸出函數 4-1 printf()  輸出函數 P 4-3 在  printf()  函數中,如果使用了多個格式化字元的情形,則  printf()  會依序把要輸出的變數或數值代入到格式指定碼中。 其中輸出的字元 ‘ B’ 、‘ y’ 、‘ e’  會依序對應到格式化字元中,再由  printf()  函數輸出。  例如: printf("%c%c%c", 'B' ,'y' ,'e');
4-1-1  格式化字串簡介 (2) 4-1 printf()  輸出函數 P 4-3 隨堂範例: printf()  函數格式化字元的範例: CH04_01.c 本程式的功用是使用  printf()  函數配合格示化字元,觀察同一個數值在格示指定碼不同的情形下,顯示結果的差異。 在第 13~16 行中,把整數變數  Num_1  使用 4 種不同的格式指定碼作輸出的顯示,另外第 17~19 行則對於浮點數變數  Num_2  則分別顯示有關科學表示法上的相異處。 執行結果 程式解說 開啟  CH04_01.c
4-1-2  輸出參數格式 (1) 4-1 printf()  輸出函數 P 4-5 除了格式化字元, printf() 函數中的格式化字串也可以進一步來控制輸出參數的格式,如下所示: [flag] : 可以使用 ‘ +’ 、‘ -’  字元指定輸出的格式。 如果使用正號  (+) ,輸出靠右同時顯示數值的正負號。 如果使用負號  (-) ,則輸出靠左對齊。  [width] : 用來指定使用多少字元空間輸出文字。 [.precision] : 指定列印小數位數的個數。 前面需以句號 “ .“  與  [width]  隔開。 %[flag][width][.precision] 格式化字元
4-1-2  輸出參數格式 (2) 4-1 printf()  輸出函數 P 4-5 隨堂範例: printf()  函數的輸出參數格式範例: CH04_02.c 在本程式中分別針對了整數與浮點數來使用不同的格式輸出控制,您可以自行比較輸出結果的差異。 其中,如果指定輸出的小數位數不足,則程式會自行四捨五入,如程式第 20 行與 21 行的顯示結果。 執行結果 程式解說 開啟  CH04_02.c
4-2 scanf() 輸入函數 (1)  4-2  scanf()  輸入函數 P 4-7 scanf()  函數讀取數值資料不區分英文字母的大小寫,所以使用  %X  與  %x  會得到相同的輸入結果  (%e  與  %E  亦同 ) 。 使用  scanf()  函數必須傳入變數位址作參數,引數列中每個變數前要加上 &( 取址運算子 ) 將變數位址傳入。 至於  scanf()  函數的原型,如下所示: scanf(char*  格式化字串 , 引數列 ); scanf("%d%f", &Num_1, &Num_2);
4-2 scanf() 輸入函數 (1) 4-2  scanf()  輸入函數 P 4-8 在各位輸入時用來區隔輸入的符號,也可以由使用者指定,例如在 scanf() 函數中使用「 , 」,輸入時也必須以「 , 」區隔。請看下列式子: 則輸入時,必須以逗號區隔如下: 請看下列式子: scanf("%d,%f", &Num_1, &Num_2); 100,300.999
4-2 scanf() 輸入函數 (2) 4-2  scanf()  輸入函數 P 4-8 隨堂範例: scanf() 函數的輸入參數格式 範例: CH04_03.c
4-2 scanf() 輸入函數 (2) 4-2  scanf()  輸入函數 P 4-9 本程式中主要說明輸入格式化字元與所輸入數值的型態必須互相對應的重要,否則會取得意想不到的變數值。 另外在第 11 行與第 15 行中分別以空白及逗號做為區隔輸入的符號,請各位於執行輸入時小心觀察其變化。  執行結果 程式解說
4-2 scanf() 輸入函數 (3) 4-2  scanf()  輸入函數 P 4-9 隨堂範例: scanf() 函數的輸入與欄寬設定 範例: CH04_04.c
4-2 scanf() 輸入函數 (3) 4-2  scanf()  輸入函數 P 4-10 本程式的主要功能是以欄寬設定功能來輸入並儲存變數,在第 8 行處將所輸入的數值,分別以 4 與 6 個數字的設定來讀取與儲存。  執行結果 程式解說
4-2-1 getchar() 函數與 putchar() 函數 (1) 4-2  scanf()  輸入函數 P 4-10 getchar() 函數的原型宣告如下: C 中還有一個  putchar()  函數可用來輸出指定的單一字元到營幕上,函數原型宣告如下:  char  字元變數 ; 字元變數 =getchar();  putchar( 字元變數 );
4-2-1 getchar() 函數與 putchar() 函數 (2) P 4-11 4-2  scanf()  輸入函數 隨堂範例: getchar() 函數的輸入與使用 範例: CH04_05.c
4-2-1 getchar() 函數與 putchar() 函數 (2) P 4-7 4-2  scanf()  輸入函數 本程式中強調 getchar() 函數在程式第 10 行中會讀入第一個字元,而第 11 行的第二道 getchar() 函數會將緩衝區中剩餘的字元讀入字元陣列 ch_2 中。 使用 getchar() 函數時,必須注意緩衝區讀取的特性,否則保留在緩衝區的字元可能造成下一個讀取函數執行錯誤。 在第 13 行中的 putchar() 函數可用來輸出單一字元。  執行結果 程式解說
4-2-2 getche() 函數與 getch() 函數 (1)  P 4-12 4-2  scanf()  輸入函數 getche()  函數會由鍵盤讀入一個字元,回傳給使用者,並在螢幕上回應  (echo)  讀入的字元,也就是立刻在營幕上顯示,而不會等待輸入  Enter  鍵。 當然如果使用者一旦輸入錯誤,便無法更改。 函數語法格式如下: 字元變數 =getche();
4-2-2 getche() 函數與 getch() 函數 (2) P 4-12 4-2  scanf()  輸入函數 隨堂範例: getche()  函數的輸入與使用 範例: CH04_06.c
4-2-2 getche() 函數與 getch() 函數 (2) P 4-12 4-2  scanf()  輸入函數 在第 9 行中,當各位輸入任一字元後,即可自動往下繼續執行,而且還會將輸入的字元顯示到螢幕上。  執行結果 程式解說
4-2-2 getche() 函數與 getch() 函數 (3) P 4-13 4-2  scanf()  輸入函數 getch()  函數則與前面介紹的  getche()  函數用法相同,也不用輸入  Enter  鍵即可讀取一個字元。 唯一不同之處是  getch()  函數不會將所輸入的字元顯示到螢幕上。
4-2-2 getche() 函數與 getch() 函數 (3) 隨堂範例: getch()  函數的輸入與使用 範例: CH04_07.c P 4-13 4-2  scanf()  輸入函數
4-2-2 getche() 函數與 getch() 函數 (3) P 4-13 4-2  scanf()  輸入函數 在第 9 行中,藉由  getch()  函數暫停程式執行的特性,通常運用在顯示資料超過一個螢幕畫面的程式中。  執行結果 程式解說
4-2-3 kbhit() 函數 (1)  P 4-14 4-2  scanf()  輸入函數 bhit() 函數是相當特別的一個函數,被執行時,並不會中斷程式來等待使用者輸入,而是去檢查緩衝區是否有資料。 一旦緩衝區有資料,則傳回一個非零的值;否則會傳回零值。 由於 kbhit() 函數只是單純的檢查是否有按鍵觸發,適合在某些須要程式持續執行,直到使用者碰觸任一按鍵,才產生其它執行請求的狀況。
4-2-3 kbhit() 函數 (2) P 4-7 4-2  scanf()  輸入函數 隨堂範例: kbhit ()  函數的輸入與使用 範例: CH04_08.c
4-2-3 kbhit() 函數 (2) P 4-14 4-2  scanf()  輸入函數 程式第 06 行,使用  while  迴圈等待使用者按鍵,直到有按鍵訊息才結束程式。 有關  while  迴圈的用法,後面章節將會作說明。  執行結果 程式解說
4-3  上機實習課程 (1)  4-3  上機實習課程 P 4-15 上機實習範例: CH04_09.c 以下程式範例將輸入學生的三科成績,並輸出每筆成績與計算三科成績的總分與平均成績。  執行結果
4-3  上機實習課程 (2) 4-3  上機實習課程 P 4-16 上機實習範例: CH04_10.c 以下程式範例中將使用  printf()  函數與跳脫字元配合來輸出以下字串 ( 包括雙引號「 " 」 ) : 執行結果 " \n 是一種跳行字元 "
4-3  上機實習課程 (3) 4-3  上機實習課程 P 4-17 上機實習範例: CH04_11.c 請設計一程式來讓使用者輸入 10 進位數,並輸出該數的 8 進位與 16 進位數的數值。 執行結果
4-3  上機實習課程 (4) 4-3  上機實習課程 P 4-18 上機實習範例: CH04_12.c 由於使用  getchar()  函數只能讀取所輸入眾多字元的第一個字元,當按下  Enter  鍵後,其餘字元將會留在緩衝區中,請設計一程式利用  scanf()  函數將這些緩衝區中的字元讀取出來。 請注意! scanf()  函數當讀取到空白字元就會停止。
4-3  上機實習課程 (4) 4-3  上機實習課程 P 4-18 上機實習範例: CH04_12.c 執行結果
4-3  上機實習課程 (5) 4-3  上機實習課程 P 4-18 上機實習範例: CH04_13.c 執行結果 請設計一程式,輸入任何一個三位數以上的整數,並輸出其百位數的數字。 例如  976, 則輸出  9 , 154637  則輸出  6  。
4-3  上機實習課程 (6) 4-3  上機實習課程 P 4-19 上機實習範例: CH04_14.c 執行結果 我們知道透過  printf()  函數中欄寬設定,可以將輸出的數字向左或向右對齊。 以下請設計一程式,分別將整數  12345  靠左與靠右輸出。

C語言 第4章 基本輸出與輸入功能

  • 1.
    王智祥 著第四章 基本輸出與輸入功能 4-1 printf() 輸出函數 4-2 scanf() 輸入函數 4-1-1 格式化字串簡介 4-2-1 getchar() 函數與     putchar() 函數 4-2-2 getche() 函數與      getch() 函數 4-2-3 kbhit() 函數 4-1-2 輸出參數格式 4-3 上機實習課程
  • 2.
    4-1 printf() 輸出函數 4-1 printf() 輸出函數 P 4-2 下面 printf() 函數會將指定的文字輸出到標準輸出設備(螢幕), printf() 函數可以配合格式指定碼( format specifier ),來輸出指定格式的變數或數值內容。 printf() 函數的原型宣告如下: printf(char* 格式化字串 , 引數列 );
  • 3.
    4-1-1 格式化字串簡介(1) 4-1 printf() 輸出函數 P 4-2 格式指定碼 說          明 %c 輸出字元 %d 輸出十進位數 %o 輸出八進位數 %x 輸出十六進位數,超過 10 的數字以大寫字母表示,例如 0xff %X 輸出十六進位數,超過 10 的數字以大寫字母表示,例如 0xFF %f 輸出浮點數 %e 使用科學記號表示法,例如 3.14e+05 %E 使用科學記號表示法,例如 3.14E+05( 使用大寫 E) %s 輸出字串
  • 4.
    4-1-1 格式化字串簡介(1) 4-1 printf() 輸出函數 4-1 printf() 輸出函數 P 4-3 在 printf() 函數中,如果使用了多個格式化字元的情形,則 printf() 會依序把要輸出的變數或數值代入到格式指定碼中。 其中輸出的字元 ‘ B’ 、‘ y’ 、‘ e’ 會依序對應到格式化字元中,再由 printf() 函數輸出。 例如: printf("%c%c%c", 'B' ,'y' ,'e');
  • 5.
    4-1-1 格式化字串簡介(2) 4-1 printf() 輸出函數 P 4-3 隨堂範例: printf() 函數格式化字元的範例: CH04_01.c 本程式的功用是使用 printf() 函數配合格示化字元,觀察同一個數值在格示指定碼不同的情形下,顯示結果的差異。 在第 13~16 行中,把整數變數 Num_1 使用 4 種不同的格式指定碼作輸出的顯示,另外第 17~19 行則對於浮點數變數 Num_2 則分別顯示有關科學表示法上的相異處。 執行結果 程式解說 開啟 CH04_01.c
  • 6.
    4-1-2 輸出參數格式(1) 4-1 printf() 輸出函數 P 4-5 除了格式化字元, printf() 函數中的格式化字串也可以進一步來控制輸出參數的格式,如下所示: [flag] : 可以使用 ‘ +’ 、‘ -’ 字元指定輸出的格式。 如果使用正號 (+) ,輸出靠右同時顯示數值的正負號。 如果使用負號 (-) ,則輸出靠左對齊。 [width] : 用來指定使用多少字元空間輸出文字。 [.precision] : 指定列印小數位數的個數。 前面需以句號 “ .“ 與 [width] 隔開。 %[flag][width][.precision] 格式化字元
  • 7.
    4-1-2 輸出參數格式(2) 4-1 printf() 輸出函數 P 4-5 隨堂範例: printf() 函數的輸出參數格式範例: CH04_02.c 在本程式中分別針對了整數與浮點數來使用不同的格式輸出控制,您可以自行比較輸出結果的差異。 其中,如果指定輸出的小數位數不足,則程式會自行四捨五入,如程式第 20 行與 21 行的顯示結果。 執行結果 程式解說 開啟 CH04_02.c
  • 8.
    4-2 scanf() 輸入函數(1) 4-2 scanf() 輸入函數 P 4-7 scanf() 函數讀取數值資料不區分英文字母的大小寫,所以使用 %X 與 %x 會得到相同的輸入結果 (%e 與 %E 亦同 ) 。 使用 scanf() 函數必須傳入變數位址作參數,引數列中每個變數前要加上 &( 取址運算子 ) 將變數位址傳入。 至於 scanf() 函數的原型,如下所示: scanf(char* 格式化字串 , 引數列 ); scanf("%d%f", &Num_1, &Num_2);
  • 9.
    4-2 scanf() 輸入函數(1) 4-2 scanf() 輸入函數 P 4-8 在各位輸入時用來區隔輸入的符號,也可以由使用者指定,例如在 scanf() 函數中使用「 , 」,輸入時也必須以「 , 」區隔。請看下列式子: 則輸入時,必須以逗號區隔如下: 請看下列式子: scanf("%d,%f", &Num_1, &Num_2); 100,300.999
  • 10.
    4-2 scanf() 輸入函數(2) 4-2 scanf() 輸入函數 P 4-8 隨堂範例: scanf() 函數的輸入參數格式 範例: CH04_03.c
  • 11.
    4-2 scanf() 輸入函數(2) 4-2 scanf() 輸入函數 P 4-9 本程式中主要說明輸入格式化字元與所輸入數值的型態必須互相對應的重要,否則會取得意想不到的變數值。 另外在第 11 行與第 15 行中分別以空白及逗號做為區隔輸入的符號,請各位於執行輸入時小心觀察其變化。 執行結果 程式解說
  • 12.
    4-2 scanf() 輸入函數(3) 4-2 scanf() 輸入函數 P 4-9 隨堂範例: scanf() 函數的輸入與欄寬設定 範例: CH04_04.c
  • 13.
    4-2 scanf() 輸入函數(3) 4-2 scanf() 輸入函數 P 4-10 本程式的主要功能是以欄寬設定功能來輸入並儲存變數,在第 8 行處將所輸入的數值,分別以 4 與 6 個數字的設定來讀取與儲存。 執行結果 程式解說
  • 14.
    4-2-1 getchar() 函數與putchar() 函數 (1) 4-2 scanf() 輸入函數 P 4-10 getchar() 函數的原型宣告如下: C 中還有一個 putchar() 函數可用來輸出指定的單一字元到營幕上,函數原型宣告如下: char 字元變數 ; 字元變數 =getchar(); putchar( 字元變數 );
  • 15.
    4-2-1 getchar() 函數與putchar() 函數 (2) P 4-11 4-2 scanf() 輸入函數 隨堂範例: getchar() 函數的輸入與使用 範例: CH04_05.c
  • 16.
    4-2-1 getchar() 函數與putchar() 函數 (2) P 4-7 4-2 scanf() 輸入函數 本程式中強調 getchar() 函數在程式第 10 行中會讀入第一個字元,而第 11 行的第二道 getchar() 函數會將緩衝區中剩餘的字元讀入字元陣列 ch_2 中。 使用 getchar() 函數時,必須注意緩衝區讀取的特性,否則保留在緩衝區的字元可能造成下一個讀取函數執行錯誤。 在第 13 行中的 putchar() 函數可用來輸出單一字元。 執行結果 程式解說
  • 17.
    4-2-2 getche() 函數與getch() 函數 (1) P 4-12 4-2 scanf() 輸入函數 getche() 函數會由鍵盤讀入一個字元,回傳給使用者,並在螢幕上回應 (echo) 讀入的字元,也就是立刻在營幕上顯示,而不會等待輸入 Enter 鍵。 當然如果使用者一旦輸入錯誤,便無法更改。 函數語法格式如下: 字元變數 =getche();
  • 18.
    4-2-2 getche() 函數與getch() 函數 (2) P 4-12 4-2 scanf() 輸入函數 隨堂範例: getche() 函數的輸入與使用 範例: CH04_06.c
  • 19.
    4-2-2 getche() 函數與getch() 函數 (2) P 4-12 4-2 scanf() 輸入函數 在第 9 行中,當各位輸入任一字元後,即可自動往下繼續執行,而且還會將輸入的字元顯示到螢幕上。 執行結果 程式解說
  • 20.
    4-2-2 getche() 函數與getch() 函數 (3) P 4-13 4-2 scanf() 輸入函數 getch() 函數則與前面介紹的 getche() 函數用法相同,也不用輸入 Enter 鍵即可讀取一個字元。 唯一不同之處是 getch() 函數不會將所輸入的字元顯示到螢幕上。
  • 21.
    4-2-2 getche() 函數與getch() 函數 (3) 隨堂範例: getch() 函數的輸入與使用 範例: CH04_07.c P 4-13 4-2 scanf() 輸入函數
  • 22.
    4-2-2 getche() 函數與getch() 函數 (3) P 4-13 4-2 scanf() 輸入函數 在第 9 行中,藉由 getch() 函數暫停程式執行的特性,通常運用在顯示資料超過一個螢幕畫面的程式中。 執行結果 程式解說
  • 23.
    4-2-3 kbhit() 函數(1) P 4-14 4-2 scanf() 輸入函數 bhit() 函數是相當特別的一個函數,被執行時,並不會中斷程式來等待使用者輸入,而是去檢查緩衝區是否有資料。 一旦緩衝區有資料,則傳回一個非零的值;否則會傳回零值。 由於 kbhit() 函數只是單純的檢查是否有按鍵觸發,適合在某些須要程式持續執行,直到使用者碰觸任一按鍵,才產生其它執行請求的狀況。
  • 24.
    4-2-3 kbhit() 函數(2) P 4-7 4-2 scanf() 輸入函數 隨堂範例: kbhit () 函數的輸入與使用 範例: CH04_08.c
  • 25.
    4-2-3 kbhit() 函數(2) P 4-14 4-2 scanf() 輸入函數 程式第 06 行,使用 while 迴圈等待使用者按鍵,直到有按鍵訊息才結束程式。 有關 while 迴圈的用法,後面章節將會作說明。 執行結果 程式解說
  • 26.
    4-3 上機實習課程(1) 4-3 上機實習課程 P 4-15 上機實習範例: CH04_09.c 以下程式範例將輸入學生的三科成績,並輸出每筆成績與計算三科成績的總分與平均成績。 執行結果
  • 27.
    4-3 上機實習課程(2) 4-3 上機實習課程 P 4-16 上機實習範例: CH04_10.c 以下程式範例中將使用 printf() 函數與跳脫字元配合來輸出以下字串 ( 包括雙引號「 " 」 ) : 執行結果 " \n 是一種跳行字元 "
  • 28.
    4-3 上機實習課程(3) 4-3 上機實習課程 P 4-17 上機實習範例: CH04_11.c 請設計一程式來讓使用者輸入 10 進位數,並輸出該數的 8 進位與 16 進位數的數值。 執行結果
  • 29.
    4-3 上機實習課程(4) 4-3 上機實習課程 P 4-18 上機實習範例: CH04_12.c 由於使用 getchar() 函數只能讀取所輸入眾多字元的第一個字元,當按下 Enter 鍵後,其餘字元將會留在緩衝區中,請設計一程式利用 scanf() 函數將這些緩衝區中的字元讀取出來。 請注意! scanf() 函數當讀取到空白字元就會停止。
  • 30.
    4-3 上機實習課程(4) 4-3 上機實習課程 P 4-18 上機實習範例: CH04_12.c 執行結果
  • 31.
    4-3 上機實習課程(5) 4-3 上機實習課程 P 4-18 上機實習範例: CH04_13.c 執行結果 請設計一程式,輸入任何一個三位數以上的整數,並輸出其百位數的數字。 例如 976, 則輸出 9 , 154637 則輸出 6 。
  • 32.
    4-3 上機實習課程(6) 4-3 上機實習課程 P 4-19 上機實習範例: CH04_14.c 執行結果 我們知道透過 printf() 函數中欄寬設定,可以將輸出的數字向左或向右對齊。 以下請設計一程式,分別將整數 12345 靠左與靠右輸出。