getchar與putchar
- getchar介紹
- putchar介紹
- 總結
在學習c語言階段存在著許多要求輸入數值的例子,在輸入字符時,如果使用scanf()和printf()根據%c轉換說明讀寫字符,接下來介紹一堆字符輸入/輸出函數:getchar()和putchar()。
getchar介紹
- int getchar ( void );
- 從流中獲取字符
- 返回標準輸入的下一個字符
- 它等效于使用 stdin 作為參數調用 getc。
getchar()函數不帶有任何參數,它從輸入隊列中返回下一個字符。
ch = getchar();
這條語句讀取下一個字符輸入,并把該字符的值賦給變量ch。
scanf("%c", &ch);
該語句與上面的語句效果相同。
putchar介紹
- int putchar ( int character );
- 將字符寫入stdout
- 將一個字符寫入標準輸出
- 它等效于使用 stdout 作為參數調用 putc
putchar()函數打印它的參數。
putchar(ch);
此語句把之前賦給ch的值作為字符打印出來。
printf("%c", ch);
該語句與上面的語句效果相同。
總結
- 由于getchar()與putchar()倆個函數只處理字符,所有較scanf()與printf()函數更快,更加簡潔。
- 同時getchar()與putchar()不需要轉換說明,因為它們只處理字符。
- 這倆個函數通常定義在stdio.h頭文件中,它們通常是預處理宏,而不是真正的函數。
#include<stdio.h>int main()
{char ch;ch = getchar();while (ch != '\n'){if (ch == ' '){putchar(ch);}else{putchar(ch + 1);}ch = getchar();}return 0;
}
觀察這段代碼,與scanf()進行比較,使用getchar()時每次迭代的末尾有一條“讀取語句”。可以將讀取和測試合并為一個表達式:
#include<stdio.h>int main()
{char ch;while ((ch = getchar()) != '\n'){if (ch == ' '){putchar(ch);}else{putchar(ch + 1);}}return 0;
}
這里可以很好的體現C特有的編程風格——把倆個行為合并成一個表達式。
以上執行的行為是賦值給ch和把ch的值與換行符作比較。
表達式ch=getchar()倆側的圓括號讓其稱為!=運算符的左值,讀取ch的值后,測試條件相當于是ch!=‘\n’。
【注意】ch=getchar()倆側的圓括號一定需要存在,因為!=運算符的優先級比=高。
putchar(ch + 1);
此語句可以很好的演示字符實際上是作為整數存儲的,表達式ch+1中的ch被轉換成int類型,然后int類型的計算結果被傳遞給接受一個int類型參數的putchar().