您好,欢迎访问三七文档
第3章基本輸入與輸出3-1C語言的控制台輸入與輸出3-2字元的輸入與輸出3-3格式化的資料輸入3-4格式化的資料輸出3-1C語言的控制台輸入與輸出-什麼是控制台輸入與輸出以C語言建立的控制台應用程式(ConsoleApplication)來說,最常使用的標準輸入裝置是鍵盤,標準輸出裝置是電腦螢幕,即所謂的控制台輸入與輸出(ConsoleInputandOutput,簡稱ConsoleI/O),如下圖所示:3-1C語言的控制台輸入與輸出-輸入與輸出函數C語言的輸入與輸出功能並非C語言本身的功能,這些函數都是C語言ANSI標準函式庫提供的函數,定義在stdio.h或conio.h標頭檔的函數。因為C語言標準輸入與輸出,是由新行字元結束的每一行所組成的文字串流,所以stdio.h標頭檔的函數在輸入資料時,就會將使用者按下的Enter鍵和LF(LineFeed)換行字元,轉換成新行字元,成為文字串流的一行資料。3-2字元的輸入與輸出3-2-1取得單一字元:getchar()3-2-2取得單一字元:getch()3-2字元的輸入與輸出在stdio.h和conio.h標題檔提供字元輸入與輸出函數,可以從電腦標準輸入裝置讀取字元和將字元顯示在標準輸出裝置,如下表所示:字元輸入函數說明intgetchar(void)使用緩衝區讀取一個字元,函數會顯示回應,需要按下Enter鍵才能讀取緩衝區的第1個字元intgetch(void)不使用緩衝區讀取一個字元,輸入的字元可以馬上讀取,且不會顯示回應intputchar(int)將參數字元輸出到螢幕顯示,成功傳回輸出字元,失敗傳回EOF3-2-1取得單一字元:getchar()在C程式可以使用getchar()函數從標準輸入裝置,通常是指鍵盤讀取使用者輸入的字元,如下所示:c=getchar();上述程式碼傳回值是整數int,如果有錯誤傳回EOF。因為函數使用緩衝區,所以需要等到使用者按下Enter鍵後,才會將輸入的字元送給C程式處理。在讀入字元後,我們可以使用putchar()函數將字元輸出到標準輸出裝置,通常是輸出到螢幕顯示,如下所示:putchar(c);3-2-1取得單一字元:getchar()在C程式除了使用getchar()函數外,我們也可以使用getch()函數從標準輸入裝置讀取一個字元,不過它並沒有使用緩衝區,也不會產生回應,如下所示:c=getch();程式碼讀取一個字元,傳回值是輸入字元,因為沒有使用緩衝區,輸入字元馬上就送給C程式處理。因為getch()函數並沒有回應,所以使用者輸入字元需自行以putchar()函數輸出到螢幕顯示。3-3格式化的資料輸入3-3-1使用scanf()函數讀取數值資料3-3-2讀取多種不同型態的資料3-3-3格式化資料輸入的修飾子3-3格式化的資料輸入C語言的格式化資料輸入函數,可以在C程式讓使用者輸入字元、數值或字串值。在C語言標準函式庫stdio.h標頭檔提供2個函數執行格式化的資料輸入和輸出,如下表所示:函數說明intscanf(格式字串,,,)格式化資料輸入,可以從標準輸入裝置以格式字串為範本讀取資料到之後的變數清單,傳回輸入的資料數intprintf(格式字串,,,)將變數或常數值以格式字串為範本格式輸出到標準輸出裝置顯示,傳回輸出的字元數,錯誤傳回EOF3-3-1使用scanf()函數讀取數值資料在scanf()函數的格式字串是使用格式字元判斷輸入哪一種資料型態,函數的傳回值是整數int,如果資料讀取成功,傳回輸入的資料數,如果失敗傳回0。例如:使用格式字元%d和%f讀取整數和浮點數值,如下所示:scanf(%d,&age);scanf(%f,&score);第1列程式碼的格式字串內含%d表示輸入整數,第2個參數使用「&」取址運算子取得變數的記憶體位址,第2列的程式碼是使用%f格式字元讀取浮點數。3-3-2讀取多種不同型態的資料-說明在同一個scanf()函數可以讀取多筆不同資料型態的資料,如下所示:scanf(%f,%d,%f,&x,&y,&z);上述程式碼的格式字串擁有%f、%d和%f一共3個格式字元,之後也擁有對應的3個變數&x、&y和&z讀取3筆資料,分別是浮點數、整數和浮點數資料,如下圖所示:3-3-2讀取多種不同型態的資料-空白字元在scanf()函數的格式字串可以使用空白字元,空白字元是指Space或Escape逸出字元的'\t'、'\n'等,這些字元並沒有用處,scanf()函數並不會處理這些字元,例如:一些空白字元的範例,如下所示:%f%d%f%d%f\t%d%f\n%d3-3-2讀取多種不同型態的資料-非空白字元在格式字串如果擁有非空白字元,使用者在輸入資料時,就需包含這些非空白字元。例如:非空白字元範例,如下所示:%f,%d,%f/*23.5,45,10.2*/%f\’%d\’%f/*23.5’45’10.2*/%f*%d*%f/*23.5*45*10.2*/格式字串中可以使用「,」、「’」和「*」等字元來分隔,所以輸入3個資料也需要包含此字元,之後的註解文字是輸入範例。3-3-2讀取多種不同型態的資料-格式字元和修飾子在scanf()函數的格式字串一定需要格式字元,一個格式字元可以對應一種資料型態,scanf()函數的格式字元,如下表所示:格式字元說明%d整數%f浮點數%c字元%s字串%e科學符號的數值%u無符號整數%o八進位表示法的整數%x十六進位表示法的整數3-3-3格式化資料輸入的修飾子-語法在scanf()函數格式字串中,格式字元的「%」符號後,字元之前還可以加上修飾子,指定輸入資料的寬度和short、long等資料型態,其格式如下所示:%[*][寬度][h|l|L]格式字元3-3-3格式化資料輸入的修飾子-範例修飾子範例說明*%f%*d%f%d不儲存格式字元的資料。在範例的4個格式字元中,第2個格式字元有「*」修飾子,表示此資料不儲存,也就是說當使用者輸入資料時,仍然需要輸入4個資料,但只有第1、3和4個資料會真正的儲存,所以之後只需使用3個變數即可寬度%5f,%2d,%5f指定輸入資料的寬度,浮點數包括小數點。範例需要輸入寬度5個字元的浮點數、2個字元的整數和5個字元的浮點數,小數點也算h|l|L%10ld指定資料型態h是short、l是long和L是longdouble。範例需要輸入寬度10個字元的長整數long3-4格式化的資料輸出3-4-1printf()函數的格式字元3-4-2printf()函數的最小欄寬3-4-3printf()函數的精確度3-4-4printf()函數的旗標與長度修飾子3-4-1printf()函數的格式字元-說明如同scanf()函數,printf()函數也是使用格式字串輸出指定資料型態的變數資料,內含「%」符號開始的格式字元,如下所示:printf(a(d)=%d\n,a);printf(b(d)=%dc(d)=%d\n,b,c);上述程式碼使用格式字元%d輸出整數變數a、b和c,如下圖所示:3-4-1printf()函數的格式字元-種類格式字元資料型態說明%d或%iint輸出正負符號的十進位整數,即signedint%oint輸出無符號的八進位整數,即unsignedint,數值的第1個0並不會輸出%x或%Xint輸出無符號的十六進位整數,即unsignedint,數值前的0x或0X並不會輸出,abcdef代表0x,ABCDEF代表0X%uint輸出無符號的十進位整數,即unsignedint%cchar、int輸出字元,如果整數轉換成無符號的字元值,即unsignedchar%schar*、char[]依序輸出字串的字元,直到'\0'字串結束字元為止,可以是字元指標或字元陣列,詳見第10-2節%ffloat、double輸出預設精確度為6位小數的浮點數%e或%Efloat、double以科學符號輸出預設精確度為6位小數的浮點數%g或%Gfloat、double如果指數小於-4或大於等於精確度時,使用%e或%E科學符號,否則使用%f輸出數值,如果數值最後是0或小數點,就不會輸出%pvoid*輸出指標的位址%nint*取得printf()函數輸出的字元數3-4-2printf()函數的最小欄寬-說明printf()函數格式字元「%」符號後,字元前可以加上最小欄寬的整數值,表示輸出變數值最少會顯示出指定欄寬的字元數,如果輸出的長度小於欄寬,則向右靠齊,然後在左邊填入空白字元,如下所示:printf(i(3d)=[%3d]\n,i);printf(i(7d)=[%7d]\n,i);printf(i(10d)=[%10d]\n,i);上述程式碼的格式字串分別指定最小欄寬3、7和10顯示整數變數i的值2046。3-4-2printf()函數的最小欄寬-範例格式字元說明範例%3d顯示最小欄寬為3,因為超過3,所以顯示完整值[2046]%7d顯示最小欄寬7,不足部分在左邊填入空白字元[2046]%10d顯示最小欄寬10,不足部分在左邊填入空白字元[2046]3-4-3printf()函數的精確度-說明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);上述程式碼的格式字元中,在「.」小數點前是最小欄寬,之後是精確度,變數f的值為3.1415926535898。3-4-3printf()函數的精確度-範例格式字元說明範例%.0f不顯示小數點和小數點下的位數[3]%.3f顯示小數點下3位[3.142]%12.3f顯示最小寬度為12,小數點下3位[3.142]%12.5f顯示最小寬度為12,小數點下5位[3.14159]3-4-3printf()函數的精確度-動態指定如果需要動態指定輸出資料的精確度或最小欄寬,可以使用整數常數或變數值指定,在格式字串是使用「*」星號代表精確度和最小欄寬,如下所示:程式碼的格式字串使用「*」星號指定浮點數的精確度和最小欄寬,在格式字串擁有一個星號,在之後的參數也需要新增對應的變數或常數值,變數f的值為3.1415926535898。3-4-3printf()函數的精確度-動態指定範例格式字元說明範例%.*f使用變數或常數值指定精確度,其值為4[3.1416]%*.*f使用變數或常數值指定最小欄寬和精確度,其值依序為12、7[3.1415927]3-4-4printf()函數的旗標與長度修飾子-語法printf()函數的格式字串不只可以指定最小寬度和精確度,在格式字元的「%」符號之後,字元之前還可以加上修飾子,指定輸入資料的寬度和short、long的資料型態,其格式如下所示:%[旗標修飾子][最小寬度][.精確度][長度修飾子]格式字元3-4-4printf()函數的旗標與長度修飾子-旗標修飾子旗標修飾子範例說明-%-10d\n輸出資料如果小於最小寬度,就向左對齊,在右邊留下空白字元+%+d\n如果變數值擁有正負號+-,在輸出正數時顯示正號,負數顯示負號空白字元%d\n如果變數值擁有正負號+-,在輸出正數時顯示一個空白字元,負數顯示負號,如果同時設定+旗標修飾子,例如:%+d\n,則是+為準,即空白字元無效#%#x\n顯示預設隱藏的字元,即八進位顯示開頭的0,十六進位顯示0x或0X,e、E、g、G和f格式字元一定會顯示小數點和尾數的03-4-4printf()函數的旗標與長度修飾子-長度修飾子長度修飾子範例說明h|l|L%ld\n指定資料型態h是short或unsignedshort、l是long或unsign
本文标题:基本输入与输出
链接地址:https://www.777doc.com/doc-3348173 .html