輸出與輸入(I/O)
標準輸出與輸入 標準輸出(Standard Output, stdout): 將資料送到螢幕顯示. 標準輸入((Standard Input, stdin): 接收鍵盤輸入的資料. 類 型 函數名稱 說 明 標頭檔 標 準 輸 出 函 數 printf 最常見功能最強的格式化輸出函數 stdio.h puts 字串顯示函數 putchar 字元顯示函數 putch conio.h 輸 入 scanf 最常見功能最強的格式化輸入函數 gets 字串讀取的輸入函數 getchar 字元讀取的輸入函數 getche 單一字元直接讀取有顯示輸入函數 getch 單一字元直接讀取無顯示輸入函數
格式化輸出(printf函數) printf函數的作用是將欲顯示的訊息輸出至螢幕,使用語法如下: printf(“顯示字串"); 例如 : printf("Every day is working day."); printf("This number is 2."); 執行結果:
格式化輸出(printf函數)-不同型態資料顯示 各種資料型態的控制格式(格式碼)如下頁所示. 參數列: 欲輸出的資料的變數,常數或運算式 例如 : printf(“I have %d cats.”, num); printf(“This number is %d.”,2); printf(“%d”,1/3); 把變數num的內容以%d的格式替換到這兒 如果num=3,則結果為 I have 3 dogs. 結果為 This is number two: 2. 結果為 0
課堂練習 請使用Dev C++,並將以下的程試碼存檔並執行. #include<stdio.h> int main(void) { int a=2; int b=3; printf("I have %d dogs and %d cats\n", a, b); system(“pause"); return 0; } 執行結果如下所示: 可使執行結果容易觀看
格式化的輸入(scanf函數) scanf函數的作用是將鍵盤輸入的資料,指定為變數的值, 使用語法如下: 例如: #include<stdio.h> int main(void) { int x,y; printf("Please input two numbers:\n"); scanf("%d %d" ,&x, &y); printf("results:%d, %d",x,y); system("pause"); return 0; } /*兩個控制格式之間用空白隔開,故輸入整數時亦需用空白(或換行或Tab鍵)隔開,按Enter鍵,表示輸入完畢,則系統才會繼續執行.*/ 說明; & 為前導符號,是記憶位址表示器 &a 即代表變數a 的記憶體位址 可試試 P.10 練習1(小程式) scanf(“ %c”,&ch); 控制格式前,須有空白才能順利輸入字元 程式執行到此行,會等待使用者輸入兩個數字
格式化的輸入(scanf函數) 請試試看若是在輸入第一筆資料後,直接按下”Enter”鍵,會有什麼結果? #include<stdio.h> int main(void) { int x,y; printf("Please input two numbers:\n"); scanf("%d,%d",&x,&y); printf("results:%d,%d",x,y); system("pause"); return 0; }/*若以逗號隔開兩個輸入的格式碼,在輸入資料時,也必須以逗號來區隔*/ 請試試看若是在輸入第一筆資料後,直接按下”Enter”鍵,會有什麼結果? *scanf()在讀取數值時,會找到第1個非空白的字元,再讀取數值.
printf()與scanf()的控制格式對照表 資料型態 %c 字元 %d 十進位整數 %o 八進位整數 %x 十六進位整數 %s 字串 %f %e 浮點(小數點表示) %lf 倍精度浮點數(l為英文小寫字母) 浮點(指數e表示)
輸入字元的函數 字元資料輸入函數功能對照表 getch( ) getche( ) getchar( ) 只接受一個字元輸入 是 需按 Enter 鍵 不要 要 回應到螢幕上 無回應 回應 # include 所屬標題檔檔 conio.h stdio.h 函數的格式 變數=getch(); 變數=getche(); 變數=getchar(); getche():因為輸入字元後,馬上就會被接收. getchar(): get character,按下enter,此字元才會被變數接收. getchar 有時後須清buffer值,用fflush(stdin)函數. getche()代表從鍵盤按下一個字元時,此字元會echo至螢幕上,但是getch()並不會echo至螢幕上. conio:console input/output.
字元輸出的函數 字元輸出函數 putchar() 將指定的字元送到螢幕顯示,此函數屬於標準輸出入函數(stdio.h) 將指定的字元送到螢幕顯示,此函數屬於控制台的輸出入函數(conio.h) 函數格式為 putch(變數); *putchar(): put character
字元輸出函數----練習 /* 字元輸入與輸出函數的應用 */ #include <stdio.h> #include<conio.h> void main(void) { char ch1,ch2,ch3; printf(“Please enter two characters:\n”); /*請直接輸入兩個字元,輸入完即讀入buffer中*/ ch1=getche(); ch2=getche(); printf("\nThe first character is:\n"); /*顯示第一個字元*/ putchar(ch1); printf("\nThe second character is:\n"); /*顯示第二個字元*/ putchar(ch2); printf("\nPlease input a character:\n"); /*請再輸入一個字元,需按下enter之後才作讀取動作*/ ch3=getchar(); printf("\nThe third character is:\n"); putchar(ch3); printf("\n\n\n"); system("pause"); }
基本的輸出與輸入----範例2 #include <stdio.h> #include <stdlib.h> /* 輸入一個字元 ,顯示相對應的ASCII碼*/ #include <stdio.h> #include <stdlib.h> int main(void) { char ch; /* 宣告一個字元變數 */ /* 使用字元輸入格式符號輸入字元 */ printf("Please input a character: "); scanf("%c",&ch); /* 顯示輸入的字元與相對應之ASCII碼 */ printf("ch=%c , ASCII code is %d. \n", ch, ch); system("pause"); return 0; /* 程式正常結束 */ }
此時ch變數的內容為”enter”(換行字元)而不能再存入使用者要鍵入之字元 讀取字元的常見錯誤 #include<stdio.h> int main(void) { int num; char ch; printf("Please input a integer:\n"); scanf("%d",&num); printf("Please input a character:"); scanf("%c",&ch); printf("\nnum=%d,ASCII code of character=%d\n",num,ch); system("pause"); return 0; } 此時ch變數的內容為”enter”(換行字元)而不能再存入使用者要鍵入之字元 *當輸入數值:12時,執行結果為 Please input a integer:12 Please input a character:num=12, ASCII code of ch=10 *換行字元(ASCII碼為10)尚留在緩衝區,所以scanf()函數等不及使用者輸入,就先讀取此換行字元.
讀取字元的常見錯誤---解決之道 1.在scanf();中的%c之前留一個空白就可以跳過此換行字元. 2.使用fflush(stdio)函數來清除緩衝區的資料. #include<stdio.h> int main(void) { int num; char ch; printf("Please input a integer:\n"); scanf("%d",&num); fflush(stdin); printf("Please input a character:"); scanf("%c",&ch); printf("\nnum=%d,ASCII code of character=%d\n",num,ch); system("pause"); return 0; }
基本的輸出與輸入----範例3 #include <stdio.h> #include <stdlib.h> /* 輸入一個字串 */ #include <stdio.h> #include <stdlib.h> int main() { char name[10]; /* 宣告字元陣列 */ /* 使用字串輸入格式符號輸入字串 */ printf("What's your name: "); scanf("%s",&name); /*輸入字串,並由字元陣列name所接收*/ printf("Hi~ %s , How are you ?\n" , name); /*印出字串的內容*/ system("pause"); return 0; /* 程式正常結束 */ } 檔案名稱: io_03.C 執行結果: What’s your name:Alice Hi~ Alice, How are you?