目錄
??getchar函數
???函數原型:
???目的:
???返回值:
???用法:
??putchar函數
???函數原型:
???目的:
???參數:
???返回值:
??用法:
??實例
???輸入密碼并確認流程
??總結
getchar
和 putchar
是兩個標準 C 庫函數,用于 C 編程中的輸入和輸出操作。它們是簡單且常用的函數,用于逐個處理字符。以下是對每個函數的詳細解釋:
兩者的頭文件都是:<stdio.h>
??getchar函數
???函數原型:
int getchar(void);
???目的:
getchar
從標準輸入(通常是鍵盤)讀取一個字符,并返回其 ASCII 值(作為整數)。getchar?讀取輸入緩沖區(qū)中的下一個字符,并在讀取成功后將其從緩沖區(qū)中刪除。
???返回值:
以 int
類型返回所讀取的字符的 ASCII 值。如果發(fā)生錯誤或達到輸入的末尾(例如從文件中讀取時),getchar
返回特殊值 EOF
(End-Of-File),通常定義為 -1
。(通過這里可以看出getchar的返回類型必須要是int型才能匹配此處的-1)
???用法:
在調用getchar()
函數時,它會等待用戶在終端輸入一個字符。一旦用戶輸入一個字符,并按下回車鍵,getchar()
函數會讀取該字符并返回其ASCII碼。如果讀取失敗或到達文件末尾(EOF),則返回特殊值EOF
(通常表示為-1)。
代碼展示:?
#include <stdio.h>
int main() {
int ch;
printf("請輸入一個字符:");
ch = getchar(); // 從標準輸入讀取一個字符ASCII碼值放到實際變量ch
printf("您輸入的字符是:");
putchar(ch); //putchar接收到一個參數(ASCII碼值),將字符輸出到標準輸出
return 0;
}
運行結果:?
??putchar函數
???函數原型:
int putchar(int character);
???目的:
putchar
將一個字符輸出到標準輸出(通常是控制臺)。
???參數:
character
:要輸出的字符。它以 int
類型傳遞,但只使用最低有效的 8 位,因此實際上被視為 char
類型處理。
???返回值:
將寫入的字符作為 unsigned char
類型返回,如果發(fā)生錯誤,則返回 EOF
。
??用法:
可以使用 putchar
在控制臺(屏幕)上顯示字符。
代碼展示:
#include <stdio.h>
int main() {
char ch = 'A';
printf("顯示一個字符:");
putchar(ch); //putchar接收到一個參數(ASCII碼值),將字符輸出到標準輸出
return 0;
}
運行結果:
下面我們通過一個實例來深入了解getchar和putchar的工作原理。
??實例
???輸入密碼并確認流程
實例描述:要求輸入一串密碼后,再次輸入一個字符 ‘ Y ’ 或 ‘ N ’來確認密碼的輸入,若輸入‘? Y ’,則確認成功;若輸入 ‘ N ’,則確認失敗。
不足代碼展示:?
#include<stdio.h>
int main()
{
char password[20];
printf("請輸入密碼:>");
scanf("%s", password);//數組名就是首地址
printf("請確認(Y/N):");
int ch = getchar();
if ('Y' == ch)
{
printf("確認成功\n");
}
else
{
printf("確認失敗\n");
}
return 0;
}
結果演示:?
???這里我們會發(fā)現在我們輸入密碼后,屏幕直接顯示出確認失敗,那么這是什么原因呢?下面我將為你解答。?
scanf和getchar在讀取數據時是從緩沖區(qū)內讀取數據,而緩沖區(qū)位于鍵盤和scanf、getchar之間,在我們通過鍵盤輸入abcdef密碼并敲下回車鍵時,數據被送到了緩沖區(qū),這時scanf讀取字符串abcdef,所以此時只剩下 \n 在緩沖區(qū)內,所以getchar就會讀取緩沖區(qū)內的 \n ,則ch= '?\n ',因此會直接打印確認失敗。
為了避免這種情況,我們需要在scanf獲取完abcdef后緩沖區(qū)內為空,所以這個時候需要做的就是清空緩沖區(qū),這時我們可以在scanf讀取完abcdef后立刻調用getchar函數將 ' \n '讀走。但是值得注意的是:scanf讀取字符串時遇到空格就不再讀取,所以當輸入的密碼換了一種形式,比如在正確密碼后加了空格和其他字符時,scanf讀取了正確密碼,但緩沖區(qū)內還有空格和其他字符以及最后的'\n'字符,所以這里我們需要通過循環(huán)來清空緩沖區(qū)。
完善代碼展示:?
#include<stdio.h>
int main()
{
char password[20];
printf("請輸入密碼:>");
//scanf讀取字符串時遇到空格就不再讀取
scanf("%s", password);//數組名就是首地址
int temp = 0;
while ((temp=getchar()) != '\n')//讀取'\n',清空緩沖區(qū)
{
;
}
printf("請確認(Y/N):");
int ch = getchar();
if ('Y' == ch)
{
printf("確認成功\n");
}
else
{
printf("確認失敗\n");
}
return 0;
}
結果演示:?
注意:這里的密碼還是abcdef,后面的 '? wwww'并沒有被scanf讀取,而是留在了緩沖區(qū)。
??總結
getchar
和 putchar
是基本函數,僅用于處理單個字符。如果需要處理字符串,可以結合循環(huán)使用這兩個函數來逐個讀取和寫入字符。對于更復雜的輸入輸出操作,應該使用 scanf
和 printf
等函數,以便處理格式化的輸入和輸出。
??今天的分享就到這里,如果覺得博主的文章還不錯的話,請??三連支持一下博主哦??文章來源:http://www.zghlxwxcb.cn/news/detail-594498.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-594498.html
到了這里,關于【C語言】getchar和putchar函數詳解:字符輸入輸出的利器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!