c語言getchar 問題,耐心的進

2021-12-19 14:31:59 字數 2658 閱讀 5517

1樓:匿名使用者

首先你要知道對於計算機而言,在取輸入的資料的時候是有個緩衝區的,用於將使用者讀入的素具進行儲存,實際上就是一個佇列;

對你的第一個問題:

int ch1=getchar();

int ch2=getchar();

int ch3=getchar();

在你輸入9回車6回車,那麼此時緩衝區的字元資料為入 9回車6回車(實際上計算機認為你輸入的是字元9和6,因為getchar是針對字元的,由於你定義的是int型,因此計算機會自動轉換為它的asc碼,也就是一個整數,再你輸出的時候又是以字串的形式輸出的,計算機又將這個整數(也就是當時的asc碼)轉換為字元,這兩個轉化不用你管,計算機有這個功能稱為自動轉化),由於getchar是取的單個字元,因此它只取走了前三個字元9 回車 6 最後還有一個回車符停留在緩衝區,那麼在使用者下一次輸入的時候計算機就首先會從回車符開始;

在你輸入9空格6空格3回車,情況和上面一樣,只是緩衝區裡面存放的是 空格 3 回車了,前面的三個都被取走了,那麼在使用者下一次輸入的時候計算機就首先會從空格開始;

對你的第二個問題:

你的想法很美好,但是你忽略了一個事實,

while ((c = getchar()) != '\n')

printf("%c", c);

while迴圈一定會執行一條語句,而且直到遇到第一個語句塊(一般為遇到一個分號,但是if-else除外,因為if-else對計算機而言是一個整體,也就是一個語句塊),也就是說當你輸入 字元c 回車符的時候,緩衝區裡存放的是 c 回車符 ,但是此時計算機會逐個檢查你的輸入,首先檢查c 它不是回車符就printf("%c", c);將c列印出來,然後發現後面還有字元回車,檢查一下不符合要求就退出迴圈,不執行下面的printf("%c", c)(此時的變數c為回車符),因此組後顯示的就是一個字元c,關於中間的兩次轉換和第一個問題的回答是一樣的;

還有什麼不懂的可以繼續交流~~~

2樓:聊芳敬帥

你可以輸入在一行上,例如:

963一行輸入了再回車。否則ch2的值就是回車,後面全部錯位。

3樓:匿名使用者

當你輸入9空格6空格3回車時,第一個getchar()接收9,第二個接收空格,第三個接受6 後面的都無法記錄,無論你輸入多少空格,而回車只相當於你傳送的命令,相當於你告訴編譯器:我的輸入完畢,請執行.

4樓:匿名使用者

問題在於,你沒有弄清楚輸入緩衝區這個概念。

getchar函式是從輸入緩衝區裡讀出最開頭的那個字元的,然後把最先的那個字元刪掉。

後面的字元不會因為getchar而受到任何影響例如,你的第二題,輸入c回車,緩衝區裡就是 c 回車getchar的作用是讀取c 然後把 c 刪掉第二遍迴圈 讀取 回車 緩衝區清空

第一題應該也明白了吧~

5樓:summer之家

#include "stdio.h"

int main(void) ----主函式直接就寫成main()就可以了

你輸入的不是字元,前面定義要定義為char輸入字元時連著輸,不要有空格或回車,因為他們也屬於字元第二個程式,也是定義c時要定義為字元的,int為整形,你的程式能執行下面的輸出,我試過了。

6樓:

question1:

程式執行到getchar的時候停住,等待使用者輸入

當你回車的時候,程式才會讀取緩衝區中的資料流。你輸入9空格6空格3回車:

int ch1=getchar();——將緩衝區中的9取走,賦值給ch1

int ch2=getchar();——將緩衝區中的空格取走,賦值給ch2

int ch3=getchar();——將緩衝區中的6取走,賦值給ch3

後面的空格3沒有讀取的需要,直接丟棄。

question2:

與第一個問題類似,程式執行到getchar的時候停止,等待使用者輸入,此時你輸入c回車,緩衝區中有c和回車兩個字元

while ((c = getchar()) != '\n')

printf("%c", c);

兩次進入迴圈,第一次c取到的值是'c',因為不等於\n,條件成立,進入迴圈體printf列印出一個c字元;第二次c取到的值是回車,也就是'\n',條件不成立,跳出迴圈,程式結束

7樓:匿名使用者

第一個問題:

c語言的標準庫的接收輸入預設使用「行輸入模式」,比如說你輸入一串abcd回車,只有按下回車的那個當頭abcd+換行才進入標準輸入檔案stdin,然後getchar從stdin中讀取輸入。

你輸入9空格6空格3回車,那麼stdin裡實際是:'9',' ','6',' ','3','\n'共6個字元,而你只有3個getchar,所以只取出了前三個字元顯示出來。

第二個問題:

如果你輸入'c'+回車的話,那麼c = getchar()第一次取到'c',所以c = 'c',而'c' != '\n',所以while的判斷條件滿足,執行printf("%c", c);輸出'c',

然後第二次迴圈getchar()取出殘留在stdin中的'\n'發現條件不滿足所以直接退出迴圈

所以輸入'c'回車迴圈體只執行了一次

to harrysummer :

你錯了,輸入c和回車('\r'),緩衝區裡實際是:'c'和換行('\n'),輸入的回車會自動被轉換成換行符

c語言用getchar做輸入兩個數字輸出兩個數

做了一個簡 單的,你參考下 include int readint if ch 9 ch 0 c c 10 ch 0 return c int main c語言編寫程式 輸入兩個數a,b,求輸出他們的和。a,b可能為大於100億的數 include stdio.h void main 說明 c語言裡...

C語言的問題,C語言問題。。。

呵呵,除了第三題,其他都不容易。有空的編吧,我看著 如果你真正掌握了c語言,其實也不是很難 c語言問題。double 在輸入 輸出時,要使用 lf 格式符。scanf lf lf f1,f2 include int main else for i lower i upper 2 i 2 return...

C語言的問題,C語言的問題

p a sizeof a sizeof int 1 這句把陣列a最後一個元素的地址賦給指標p 然後利用迴圈讓指標p不斷地前移,每前移一次把對應的陣列元素值加一 最後指標p移動到陣列a的前一個位置,所以 p 1 就是陣列的第一個元素,並且加過1的.所以 p 1 就是 11 1 12.以上是程式的總體思...