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結束...