Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 基本輸入與輸出 5-1 程式的輸入與輸出 5-2 字元與字串的輸入 5-3 字元與字串的輸出 5-4 格式化資料的輸入

Similar presentations


Presentation on theme: "第5章 基本輸入與輸出 5-1 程式的輸入與輸出 5-2 字元與字串的輸入 5-3 字元與字串的輸出 5-4 格式化資料的輸入"— Presentation transcript:

1 第5章 基本輸入與輸出 5-1 程式的輸入與輸出 5-2 字元與字串的輸入 5-3 字元與字串的輸出 5-4 格式化資料的輸入
5-5 格式化資料的輸出 5-6 格式化的字串輸出

2 5-1 程式的輸入與輸出 5-1-1 C語言的基本輸入與輸出 5-1-2 字串的基礎

3 5-1 程式的輸入與輸出 電腦程式通常都需要和使用者互動,程式從使用者取得電腦周邊裝置輸入的資料,然後將執行結果在電腦輸出裝置顯示,最常使用的標準輸入裝置是鍵盤和滑鼠,標準輸出裝置是電腦螢幕,如下圖所示:

4 5-1-1 C語言的基本輸入與輸出 C語言的輸出和輸入操作是定義在<stdio.h>標頭檔的函數,屬於ASNI標準的C語言函式庫。 C語言的標準輸入與輸出屬於一種文字輸入與輸出模式,這是循序一行一行所組成的文字串流(Text Stream),每一行由新行字元(即‘\n’字元)結束,不論使用的硬體或作業系統,C語言的標準輸入與輸出都是採用這種模式。 例如:<stdio.h>標頭檔的函數在輸入時,會將使用者按下的Enter鍵和LF(Line Feed)換行字元,轉換成新行字元。

5 5-1-2 字串的基礎 C語言的字串是一種字元陣列,陣列是連續記憶體的變數集合,也就是由字元資料型態所組成的陣列結構。例如:宣告一個字元陣列來儲存字串,其宣告的方式,如下所示: char line[80]; 存取陣列元素是使用line[0]、line[1]~line[79]來存取,如下所示: line[i] = c; 在字元陣列的結束加上字元'\0'當作結束字元,如下所示: line[i] = '\0';

6 5-2 字元與字串的輸入 5-2-1 取得單一字元getchar() 5-2-2 取得單一字元getch()
5-2-3 取得字串gets() 5-2-4 使用getchar()讀取整個字串 5-2-5 將字元放回緩衝區ungetch()

7 5-2 字元與字串的輸入 在<stdio.h>標題檔的標準函式庫是從電腦標準輸入裝置,通常是指鍵盤,讀取字元和字串的函數,如下表所示:

8 5-2-1 取得單一字元getchar()-讀取一個字元
c = getchar(); 程式碼可以取得輸入字元的ASCII碼,其傳回值是整數int,如果有錯誤傳回EOF(End of File)檔案結束的常數值。 使用緩衝區讀取資料,需要等到使用者按下Enter鍵

9 5-2-1 取得單一字元getchar()-讀取多個字元
do { c = getchar(); printf("%c", c); } while ( c != 'x' ); 程式碼的do/while迴圈讀取輸入的字元,直到使用者按下「x」字元。

10 5-2-2 取得單一字元getch() 函數getch()也可以從標準輸入裝置讀取一個字元,不過它並沒有使用緩衝區,而且也不會回應,如下所示: c = getch(); 程式碼讀取一個字元,傳回值是輸入的字元,因為沒有使用緩衝區,輸入的字元馬上就送給程式處理,函數沒有回應,輸入的字元需自行使用程式碼輸出到螢幕顯示。

11 5-2-3 取得字串gets() 函數gets()可以從標準輸入裝置讀取整行輸入的文字內容,也就是一個字元陣列的字串,函數使用緩衝區讀取資料,需要等到使用者按下Enter鍵後,才會將字串送給程式讀取,如下所示: char line[80]; gets(line); 程式碼先宣告字元陣列line,大小是80個字元,然後以字元陣列為參數讀取字串內容,傳回值是字元陣列的指標,也就是字串內容。

12 5-2-4 使用getchar()讀取整個字串 使用迴圈配合getchar()函數即可摸擬gets()函數的功能,如下所示:
for ( i = 0; (c=getchar()) !=EOF && c != '\n'; i++) line[i] = c; line[i] = '\0'; for迴圈的第2部分先呼叫getchar()函數取得一個字元(c=getchar()),然後檢查輸入字元是否為EOF或Enter鍵,在命令列提示字元按下Ctrl-Z組合鍵就是EOF,如果不是,就將字元存入陣列中,最後在字元陣列的最後加上'\0'的字串結束字元。

13 5-2-5 將字元放回緩衝區ungetch() 函數ungetch()可以將一個字元放回緩衝區,如下所示:
程式碼放回緩衝區一個字元1,表示下次從輸入裝置呼叫getch()函數讀取的字元就是1,成功時傳回參數,有錯誤傳回EOF。

14 5-3 字元與字串的輸出 5-3-1 輸出字元 5-3-2 輸出字串

15 5-3 字元與字串的輸出 在<stdio.h>標題檔的標準函式庫提供從電腦標準輸出裝置,通常是指螢幕,顯示字元和字串的函數,如下表所示:

16 5-3-1 輸出字元 函數putchar()是將字元輸出到標準輸出裝置,通常是輸出到螢幕顯示,如下所示:
putchar(c); 程式碼可以將參數的字元c輸出到螢幕顯示。

17 5-3-2 輸出字串 如果是整個字串內容,即C語言的字元陣列,可以使用puts()函數將字串輸出到螢幕顯示,如下所示:
puts(line); 程式碼可以將參數的字元陣列line輸出到螢幕顯示,在字串後會加上一個新行字元。

18 5-4 格式化資料的輸入 5-4-1 輸入字串 5-4-2 輸入整數值 5-4-3 輸入多種不同型態的資料
5-4-4 格式化資料輸入的修飾子

19 5-4 格式化資料的輸入-格式化輸入輸出函數 在C語言標準函式庫<stdio.h>標頭檔提供2個函數分別執行格式化的資料輸入和輸出,如下表所示:

20 5-4-1 輸入字串 scanf()函數讀取使用者輸入的字串,如下所示:
scanf("%s", line); 函數參數一共有2個,第1個是格式字串,內含「%」符號開始的格式字元,%s表示輸入的資料格式是字串,第2個參數是儲存取得資料的變數,line是一個字元陣列。

21 5-4-2 輸入整數值 scanf()函數是以格式字元來判斷輸入的資料屬於那一種資料型態,scanf()函數一樣可以讀取數值資料,如下所示:
scanf("%d", &cels); 函數參數一共有2個,第1個是格式字串,內含%d表示輸入的資料是整數,第2個參數使用「&」取址運算子取得變數的記憶體位址,&cels的意義是「將變數cels的位址傳入scanf()函數,以便取得輸入資料的變數值」,變數cels儲存的值就是使用者輸入的整數。

22 5-4-3 輸入多種不同型態的資料-說明 scanf()函數不只能夠輸入單一資料,在同一個函數還可以讀取多筆資料,而且是不同型態的資料,如下所示:

23 5-4-3 輸入多種不同型態的資料-格式字串 scanf()函數第1個參數的格式字串可以由3種字元組成,如下所示:
空白字元:在scanf()函數的格式字串可以使用空白字元,在此的空白字元是指Space或逸出字元的'\t'、'\n'等,這些字元並沒有用處,scanf()函數並不會處理這些字元。 非空白字元:如果在格式字串擁有非空白字元,此時使用者輸入的資料就需包含這些非空白字元。 格式字元和修飾子:在scanf()函數的格式字串一定需要格式字元,關於修飾子的說明請參閱下一節,一個格式字元可以對應一種資料型態。

24 5-4-3 輸入多種不同型態的資料-格式字元

25 5-4-4 格式化資料輸入的修飾子-說明 在格式字元的「%」符號之後,字元之前還可以加上修飾子,指定輸入資料的寬度和short、long的資料型態,其格式如下所示: %[*][寬度][h|l|L]格式字元

26 5-4-4 格式化資料輸入的修飾子-範例

27 5-5 格式化資料的輸出 5-5-1 printf()函數的基本使用 5-5-2 printf()函數的格式字元

28 5-5-1 printf()函數的基本使用 printf()函數的最基本使用是顯示文字值的字串,也就是一些訊息文字,只需配合逸出字元,即可編排輸出的字串內容,如下所示: printf("\"C/C++"); printf("程式設計"); printf("範例教本\"\n"); printf("\t陳會安 編著\n");

29 5-5-2 printf()函數的格式字元-說明
printf("a(d) = %d\n", a); printf("b(d) = %d c(d) = %d\n", b, c);

30 5-5-2 printf()函數的格式字元-格式字元1

31 5-5-2 printf()函數的格式字元-格式字元2

32 5-5-3 printf()函數的最小欄寬-說明
在printf()函數格式字元「%」符號後,字元前可以如同scanf()函數加上最小欄寬的整數值,輸出的變數值最少會顯示出指定欄寬的字元數,如果輸出的長度小於欄寬,則向右靠齊,然後在左邊填入空白字元,如下所示: printf("i(3d) = [%3d]\n", i); printf("i(7d) = [%7d]\n", i); printf("i(10d) = [%10d]\n", i); 上述程式碼的格式字串分別指定最小欄寬3、7和10來顯示整數變數i的值1023。

33 5-5-3 printf()函數的最小欄寬-範例

34 5-5-4 printf()函數的精確度-說明 printf()函數的精確度主要是使用在浮點數和字串剪裁,例如:%f、%e預設的精確度為小數點下6位數,printf()函數可以調整輸出資料所需的精確度,如下所示: printf("f(.0f) = [%.0f]\n", f); printf("f(.3f) = [%.3f]\n", f); printf("f(12.3f) = [%12.3f]\n", f); printf("f(12.5f) = [%12.5f]\n", f);

35 5-5-4 printf()函數的精確度-範例 變數f的值為 ,如下表所示:

36 5-5-4 printf()函數的精確度-動態指定
如果需要動態指定輸出資料的精確度或最小欄寬,可以使用整數常數或變數值指定,在格式字串使用「*」星號代表精確度和最小欄寬,如下所示:

37 5-5-4 printf()函數的精確度-動態指定範例

38 5-5-5 printf()函數的旗標與長度修飾子-說明
printf()函數的格式字串不只可以指定最小寬度和精確度,在格式字元的「%」符號之後,字元之前還可以加上修飾子,指定輸入資料的寬度和short、long的資料型態,其格式如下所示: %[旗標修飾子][最小寬度][.精確度][長度修飾子]格式字元

39 5-5-5 printf()函數的旗標與長度修飾子-旗標修飾子範例

40 5-5-5 printf()函數的旗標與長度修飾子-長度修飾子範例

41 5-6 格式化的字串輸出 printf()函數的%s格式字串是用來輸出字串的字元陣列,配合格式字串的最小寬度、精確度和旗標修飾子,不只可以輸出靠左或靠右編排的文字內容,甚至可以剪裁字串,只輸出部分的字串內容。


Download ppt "第5章 基本輸入與輸出 5-1 程式的輸入與輸出 5-2 字元與字串的輸入 5-3 字元與字串的輸出 5-4 格式化資料的輸入"

Similar presentations


Ads by Google