在C語言中getchar的使用方法和讀取規(guī)則講解
前言
今天為大家分享getchar在C語言中的使用
一、getchar是什么?
getchar中文意思是獲取字符,getchar函數(shù)從標準輸入輸出里讀取下一個字符,返回類型為int整形,返回用戶輸入的ASCII碼值,如果到達文件末尾或者出錯返回EOF
二、getchar的使用方法
1.只獲取一次(字符/字符串)的代碼樣例
代碼如下(示例):
#include<stdio.h>
int main()
{
int ch = getchar();
putchar(ch);
return 0;
}代碼執(zhí)行結果

2.循環(huán)獲取(字符/字符串)的代碼樣例
代碼如下(示例):
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}注意事項
1.這里的EOF并不是輸入EOF循環(huán)結束
2.EOF的真實值是-1
3.這里的Ctrl+z的效果便是EOF
代碼執(zhí)行結果

到這里有些細心的朋友就會發(fā)現(xiàn)代碼里面并沒有換行指令為什么運行的結果會自動換行?
getchardu讀取字符的時候真的是在鍵盤上讀取的嗎?
getchar 緩沖區(qū) 鍵盤
其實在getchar和鍵盤之間有個緩沖區(qū),在緩沖區(qū)是空
的時候,getchar就會等待鍵盤輸入字符,當用戶輸入
A時其實多輸入了一個回車,這是緩沖區(qū)里面就有A\n
getchar首先讀取了A然后輸出,然后又上去讀取了\n
再輸出\n就達到了換行的效果,所以B會在第三行輸入
三、getchar的讀取規(guī)則
講了這么多可能很多人都不明白這么一個代碼有什么用呢?其實在很多地方都會用到,比如模擬用戶登入場景。但是寫這個代碼的時候就要注意getchar的讀取規(guī)則
代碼如下(示例)
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("請輸入密碼:>");
scanf("%s", password);
printf("請確認密碼(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("確認成功");
}
else
{
printf("確認失敗");
}
return 0;
}
代碼運行結果

在這里我們看到都還沒確認就直接輸出確認失敗,到這里大家應該都明白了是什么問題吧?沒錯就是\n的問題,這里getchar發(fā)現(xiàn)緩沖區(qū)里面還有一個\n就沒等我們輸入直接把\n讀走
那應該如何解決呢?
代碼如下(示例)
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("請輸入密碼:>");
scanf("%s", password);
getchar();
printf("請確認密碼(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("確認成功");
}
else
{
printf("確認失敗");
}
return 0;
}
代碼運行結果

接下來我們再想大家思考一個問題,當密碼里面有空格的時候還會確認成功嗎?

沒錯還是會失敗,這又是為什么呢?因為數(shù)組把空格前面的123456讀走了,但是緩沖區(qū)里還剩下空格abcdef\n所以getchar還是會讀取緩沖區(qū)里面的東西
那該怎么解決呢?
代碼如下(示例)
int main()
{
char password[20] = { 0 };
printf("請輸入密碼:>");
scanf("%s", password);
int temp = 0;
while((temp=getchar())!='\n');
{
;
}
printf("請確認密碼(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("確認成功");
}
else
{
printf("確認失敗");
}
return 0;
}代碼運行結果

總結
從上面我們學習到了getchar,發(fā)現(xiàn)其實getchar的使用很簡單就是讀取字符,但是難的是它的讀取字符是的規(guī)則,所以我們在使用getchar的時候一定要慎重思考它的讀取規(guī)則。
到此這篇關于在C語言中getchar的使用方法和讀取規(guī)則的文章就介紹到這了,更多相關C語言getchar的使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++面試八股文之如何實現(xiàn)strncpy函數(shù)
strncpy函數(shù),主要用做字符串復制,將于字符從一個位置復制到另一個位置,那么如何實現(xiàn)一個strncpy函數(shù),下面小編就來和大家簡單講講吧2023-07-07
用標準c++實現(xiàn)string與各種類型之間的轉換
這個類在頭文件中定義, < sstream>庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。另外,每個類都有一個對應的寬字符集版本2013-09-09
推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)
這篇文章主要介紹了C/C++編譯器的一些易混淆概念,這里腳本之家小編特為大家分享一下,需要的朋友可以參考下2021-06-06

