getchar函式
getchar函式和scanf函式相類似,都是用來列印東西的,不同的是getchar函式只能用來從stdin(標準輸入)中獲取字符但是scanf可以輸入整形和浮點型資料,
getchar函式的寫法
int main()
{
int ch = getchar();
printf("%c", ch);
return 0;
}
可能大家會有疑問了,為什么我這里ch明明是用來存盤getchar函式讀取的字符變數,為什么要用int而不是char呢?我來解釋一下,在這里有兩點原因:1.舉個例子,我們想列印字符‘a’,字符‘a’在C語言中是以ASCII碼值97來存盤的,所以int在這里存盤ASCII碼值97,也可以起到列印‘a’的作用,2.當getchar讀取失敗,錯誤時,getchar會回傳EOF,EOF就是整形資料 -1,我們知道整形資料占4個位元組,而char字符資料占1個位元組,如果我們使用char來定義ch,很顯然,記憶體不夠,綜上考慮,所以我們使用int來定義ch,
putchar函式
putchar函式和printf函式相類似,用來向stdout(標準輸出)列印字符資料,
putchar函式的寫法
int main()
{
int ch = getchar();
putchar(ch);
return 0;
}
總結
putchar和getchar函式只能用來操作字符,而且一次只能操作一個字符,與printf和scanf函式相比較有一些不足,所以我們在使用時要注意,
關于getchar和putchar的幾個代碼實體
1

我們可以不停地輸入字符,然后輸出輸入的字符,這個代碼不會終止,我們可以使用ctrl+z來終止這個程式(回傳EOF),注:而且括號一定要記著加,否則當你輸入一個字符后,它會不停地列印輸入的字符,一定要注意運算子號優先級,
2

我們想設計一個簡單的登錄程序的程式,這樣寫代碼如果不細看感覺是沒有問題的,我們運行一下,會出現bug,當我們輸入完密碼后,程式直接出現確認失敗,

我們不得不提到一個東西,那就是輸入緩沖區,我們用鍵盤輸入的字符并不能直接被放到函式中(scanf ,putchar等等),而是先被放到了緩沖區中,之后函式再從緩沖區中一個一個地取出字符,而在上面的程式中我們輸入完密碼后又要輸入一個回車,所以回車也被存盤到了輸入緩沖區中,而回車是為了讓之前的陣列進入到input中去,并沒有被scanf中的input帶走,所以這時候緩沖區中就有了一個\n,當程式向下執行時,getchar從緩沖區拿東西,如果緩沖區中沒有東西,他會等我們輸入東西,而這時\n在緩沖區中,直接拿\n不再等待,為了消除這個bug,我們可以把這個\n拿走,只需要在scanf函式后面寫上一個getchar(),于是\n就被拿走,程式可以正常運行了,

(修改后的代碼)
3
在修改完上面的bug后,我們接著使用這串代碼,當我們輸入密碼時,給密碼中間來個空格會如何--abcd hehe,可以明確地知道,input只會把空格之前的abcd從輸入緩沖區拿走,而 hehe\n被留在了輸入緩沖區,因此getchar()只能拿走一個空格,緩沖區仍然有hehe\n,依然無法得到我們想要的效果,為此,我們可以利用回圈修改代碼清理緩沖區:

以上就是鄙人對getchar,putchar函式的認識,如果覺得對您有幫助,一鍵三連啊!也希望各位可以提出一些寶貴的意見,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339500.html
標籤:其他
