為什麼在c語言中,字元型不能用scanf輸入,而是用getc

時間 2021-12-19 12:44:04

1樓:匿名使用者

樓主你好,關於你問的這個問題在我初學c語言的時候也遇到過,不僅是乙個人遇到,這是很多初學者都會遇到的問題~,當然,我不是說樓主大哥你是初學者~~~呵呵~~~~~~~這個問題曾經麻痺了很多人,開始我也是不知道是什麼原因,直到一次偶然的機會我才知道問題的所在~`

出錯原因如下:

當你輸入資料後 回車,資料才被函式「scanf()」讀入,問題

就出在這個「回車」上;在c裡面 回車 鍵是當兩個字元來用的:即

「回車」和「換行」;這樣一來,問題就來了;當你緊接著在

「scanf()」後面再來一句「scanf()」讀入乙個字元的時候,

此時在第二個「scanf()」裡面讀入的不是你輸入的那個字元~~~ 而是那個使人忽略的 「回車」字元;

當然,要是你第二句「scanf()」不是輸入字元而是輸入資料的 話, 那就沒有此問題出現。

解決的辦法是在第二個「scanf()」語句前加一句getchar();

此處的getchar();就是用來吞噬掉前面的「回車」。

其實c語言不僅僅只有這個使人麻痺的問題,還有許多 是你自認為是對的語句,在你執行的時候會出現一些莫名其妙的錯誤,使人防不甚防。這又是c語言的乙個不足之處。

2樓:匿名使用者

字元型可以用scanf輸入,只不過在迴圈的輸入,或者連續多個輸入單個字元時,使用scanf處理不好會出些問題。

如果處理單個字元的話, 一般在scanf語句後還要加一條getchar語句;來接受回車鍵。例如:

char c;

scanf("%c",&c);

getchar();

其實使用getchar();一般也是連續用兩次。

3樓:

不是,你記錯了吧!!

可以用scanf輸入,scanf("%c",&a);

getchar() 也可以,不過只能處理單個字元。

還有c當初字元處理常遇到的輸入流問題應該也知道了吧??

4樓:匿名使用者

可以用scanf輸入 例如:char a;scanf("%c",&a);

為什麼輸入字元型字母要同時運用scanf和getchar才能成功?

5樓:

因為scanf("%c", &ch);只接收乙個字元,會把輸入的'\n'留在輸入緩衝區;而'\n'也是字元,後面的輸入語句會把它接收而收不到你輸入的有用字元,所以會出錯。寫成scanf("%c", &ch);getchar();後getchar();會把遺留在緩衝區中的那個'\n'接收掉,就不會出錯了。但你這樣寫也不行,ch就只是個'\n'了,後面就用不成ch了,把ch=去掉就可以了……

6樓:

可能是我倆用的環境不同,code:blocks可以單獨用他們,在scanf前面經常加乙個getchar,是因為,如果在scanf之前有其他輸入,在最後輸入enter時,是個字元,會被scanf讀取,用getchar是用來吃enter的,

#include

#include

#include

using namespace std;

int main()

getchar有乙個int型的返回值.當程式呼叫getchar時.程式就等著使用者按鍵.

使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按回車為止(回車字元也放在緩衝區中).當使用者鍵入回車之後,getchar才開始從stdio流中每次讀入乙個字元.

getchar函式的返回值是使用者輸入的第乙個字元的ascii碼,如出錯返回-1,

c語言中的字元型的運算,在C語言中,要求運算數必須是整型或字元型的運算子是()。

include include include using namespace std void k add string a,string b,int k 將長的字串放在前面 if a.size b.size string temp a a b b temp 對源字串進行翻轉 reverse a....

c語言中字元1是什麼意思, C語言中字元 1 是什麼意思?

珈藍惜夢 1 為轉義字元,代表的意思是 標題開始 在c語言中,所有的ascii碼都可以用 加數字 一般是8進位制數字 來表示。而c中定義了一些字母前加 來表示常見的那些不能顯示的ascii字元,如 0,t,n等,就稱為轉義字元,因為後面的字元,都不是它本來的ascii字元意思了。轉義字元是很多程式語...

C語言中 a 為什麼不屬於字元型常量呢?有高手為我詳細講解一下switch語句的用法嗎

a 是字元常量 a char 2 int a 1 switch a 其中最後一個break case else 下面那個 可以不加如果把break全去掉,就會輸出a is onea is twoa is more than two 因為程式會從 case 相應的值 處開始執行,一直到switch結束...