C語言中getchar()與putchar()函數(shù)詳解
getchar()與putchar()getchar()getchar()的一個重要機制getchar()與scanf()區(qū)別 putchar() 實例1.清空緩沖區(qū)2.字符串中有空格
getchar()與putchar()
getchar
與putchar
其實最基本的作用就是用getchar
讀取一個字符,再用putchar
輸出一個字符
基本用法:
#include <stdio.h> int main() { char c = 0; c = getchar(); putchar(c); return 0; }
運行結果:
輸入一個a
,然后再打印a
這里getchar
和putchar
與scanf
和printf
的作用基本一致,只不過getchar,putchar
只對字符類型操作,而scanf,printf
對指定的類型進行操作
getchar()
getchar的定義:int getchar(void)
- 返回類型是
int
值,所以返回的是字符的ASCII碼 - 參數(shù)列表中是
void
,所以不必在括號中傳參數(shù) - 如果
getchar
讀取失敗,就會返回EOF
getchar()的一個重要機制
在getchar
函數(shù)的作用與鍵盤間,存在一個輸入緩沖區(qū),從鍵盤輸入的內(nèi)容會存在這個緩沖中,接下來getchar
函數(shù)會從緩沖區(qū)中取走內(nèi)容
因為getchar
是對于字符進行操作,所以每次執(zhí)行getchar
都會取走輸入緩沖區(qū)中一個字符
并且getchar
還會取走回車也就是\n
與空格
我們用下面的代碼進行對輸入緩沖區(qū)機制的測試:
int main() { char ch = 0; while ((ch = getchar()) != EOF) { putchar(ch); } return 0; }
當輸入一個字符a
時,同時我們會按下回車,此時輸入緩沖區(qū)中就有兩個字符:a\n
首先,getchar()
會先取走字符a
,然后通過putchar
打印出來
接著循環(huán),getchar()
取走字符\n
,然后通過putchar
打印出來,所以在輸出中光標不在輸出的a
的后面,而在a
的下一行
接著,輸入緩沖區(qū)中以無內(nèi)容,getchar()
就會讀到EOF
,退出循環(huán)
還可以用以下代碼更進一步驗證getchar()
對于回車的讀?。?/p>
int main() { int i = 0; char ch = 0; while ((ch = getchar()) != EOF) { putchar(ch); i++; } printf("%d", i); return 0; }
輸入字符a
和b
,這里實際上是輸入a
后,按一次回車,輸入b
后,按一次回車,所以輸入緩沖區(qū)中的內(nèi)容為:a\nb\n
,所以getchar()
會讀取四次,所以i
的值為會是4
getchar()與scanf()區(qū)別
*getchar
與scanf
的主要區(qū)別是getchar
能讀取輸入緩沖區(qū)中的一切字符類型,包括空格與回車,而scanf()不能讀取空格與回車
putchar()
putchar的定義:
int putchar ( int character );
- 傳的參數(shù)是要輸出的字符變量
putchar
的用法與printf("%c",character)
一致,都是輸出一個字符
實例
1.清空緩沖區(qū)
下面一段把代碼是輸入一段密碼,并且還要用getchar()接受是否確認密碼的選項:
int main() { char password[20] = { 0 }; int ch = 0; printf("輸入密碼\n"); scanf("%s", password); printf("請確認密碼(Y/N):"); ch = getchar(); if (ch == 'Y') { printf("成功\n"); } else { printf("失敗\n"); } return 0; }
我們輸入一端密碼后,還未輸入Y或N,代碼就自動打印“失敗”并退出運行
這其實還是scamf
無法讀取回車在作祟
當我們輸入1234567后,此時在輸入緩沖區(qū)中其實存的是:1234567\n
scanf("%s", password);
語句讀取字符串,因為它無法讀取\n
所以此時scanf
只會讀取走1234567
,在輸入緩沖區(qū)中還有\n
所以在之后的ch = getchar();
中,就會讀取\n
,不等于Y,所以會打印失敗
所以,要把緩沖中的 \n
消化掉,也就是清空緩沖區(qū)
只要,再寫一個getchar()
語句,將\n
讀取走,就可以了
代碼如下:
int main() { char password[20] = { 0 }; int ch = 0; printf("輸入密碼\n"); scanf("%s", password); printf("請確認密碼(Y/N):"); getchar(); //清空緩沖區(qū) ch = getchar(); if (ch == 'Y') { printf("成功\n"); } else { printf("失敗\n"); } return 0; }
運行成功
2.字符串中有空格
以下代碼是輸入一個字符串再輸出:
int main() { char str[20] = { 0 }; scanf("%s", str); printf("%s", str); return 0; }
如果輸入的字符串是連續(xù)的,也就是沒有空格的,此代碼正常運行
如果輸入的字符串是有字符的,就會出現(xiàn)錯誤
錯誤的原因還是scanf
無法讀取緩沖區(qū)中的空格,所以接下來要使用getchar
去讀取字符串
因為輸入的一段字符串一定會是以\n
為結尾
所以在前面的while ((ch = getchar()) != 'EOF)
改成while ((ch = getchar()) != '\n')
即可,只要不遇到\n
就一直讀取下去
代碼如下:
int main() { char str[20] = { 0 }; char ch = 0; while ((ch = getchar()) != '\n') { putchar(ch); } return 0; }
運行結果:
到此這篇關于C語言中getchar()與putchar()函數(shù)詳解的文章就介紹到這了,更多相關C語言 getchar()與putchar()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!