getchar()和scanf()的區別

2021-09-12 02:13:01 字數 2360 閱讀 2286

. 大多數人只看getchar 名字,以為其返回值是char 型別。但是getchar 的確不是char 型別,而是int 型別,其原型如下:

int getchar(void);

getchar有乙個int型的返回值.當程式呼叫getchar時.程式就等著使用者按鍵.使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按回車為止(回車字元也放在緩衝區中).當使用者鍵入回車之後,getchar才開始從stdio流中每次讀入乙個字元.

getchar函式的返回值是使用者輸入的第乙個字元的ascii碼,如出錯返回-1,且將使用者輸入的字元回顯到螢幕.如使用者在按回車之前輸入了不止乙個字元,其他字元會保留在鍵盤快取區中,等待後續getchar呼叫讀取.也就是說,後續的getchar呼叫不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到緩衝區中的字元讀完為後,才等待使用者按鍵.

getchar()是在輸入緩衝區順序讀入乙個字元(包括空格、回車和tab)getchar()使用不方便,解決方法: (1)使用下面的語句清除回車:while(getchar()!=』\n』); (2)用getche()或getch()代替getchar(),其作用是從鍵盤讀入乙個字元(不用按回車),注意要包含標頭檔案

2. getchar()是stdio.h中的庫函式,它的作用是從stdin流中讀入乙個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了,第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字元,以後的getchar()再執行時就會直接從緩衝區中讀取了。實際上是 輸入裝置->記憶體緩衝區->程式getchar 你按的鍵是放進緩衝區了,然後供程式getchar 你有沒有試過按住很多鍵然後等一會兒會滴滴滴滴響,就是緩衝區滿了,你後頭按的鍵沒有存進緩衝區. 鍵盤輸入的字元都存到緩衝區內,一旦鍵入回車,getchar就進入緩衝區讀取字元,一次只返回第乙個字元作為getchar函式的值,如果有迴圈或足夠多的getchar語句,就會依次讀出緩衝區內的所有字元直到』\n』.要理解這一點,之所以你輸入的一系列字元被依次讀出來,是因為迴圈的作用使得反覆利用getchar在緩衝區裡讀取字元,而不是getchar可以讀取多個字元,事實上getchar每次只能讀取乙個字元.如果需要取消』\n』的影響,可以用getchar();來清除,這裡getchar();只是取得了』\n』但是並沒有賦給任何字元變數,所以不會有影響,相當於清除了這個字元.還要注意的是這裡你在鍵盤上輸入ssss看到的回顯正是來自於getchar的作用,如果用getch就看不到你輸入了什麼

蜜款冬花 2019/3/6 15:03:30

scanf( )函式和gets( )函式都可用於輸入字串,但在功能上有區別。若想從鍵盤上輸入字串"hi hello",則應該使用__gets__函式。

gets可以接收空格;而scanf遇到空格、回車和tab鍵都會認為輸入結束,所有它不能接收空格。

char string[15]; gets(string); /遇到回車認為輸入結束/

scanf("%s",string); /遇到空格認為輸入結束/

所以在輸入的字串中包含空格時,應該使用gets輸入。

scanf和gets獲取字串時的區別

在c語言中,能構獲取字串的函式至少有兩個:

1.scanf()

所在標頭檔案:stdio.h

接受字串時:scanf("%s",字元陣列名或指標);

2.gets()

所在標頭檔案:stdio.h

語法:gets(字元陣列名或指標);

兩者在接受字串時:

1.不同點:

scanf不能接受空格、製表符tab、回車等;

而gets能夠接受空格、製表符tab和回車等;

2.相同點:

字串接受結束後自動加』\0』。

例1:#include

main()

char ch1[10],ch2[10];

scanf("%s",ch1);

gets(ch2);

依次鍵入asd空格fg回車,asd空格fg回車,則ch1=「asd\0」,ch2=「asd fg\0」。

例2:#include

main()

char ch1[10],ch2[10],c1,c2;

scanf("%s",ch1);

c1=getchar();

gets(ch2);

c2=getchar();

依次鍵入asdfg回車,asdfg回車,則ch1=「asdfg\0」,c1=』\n』,ch2=「asdfg\0」,c2需輸入。

scanf :當遇到回車,空格和tab鍵會自動在字串後面新增』\0』,但是回車,空格和tab鍵仍會留在輸入的緩衝區中。

gets:可接受回車鍵之前輸入的所有字元,並用』\n』替代 『\0』.回車鍵不會留在輸入緩衝區中

gets()用到讀取字串,用回車結束輸入

scanf()可以讀取所有型別的變數

getchar 與scanf 的理解

1.getchar 是將輸入的字元都存到緩衝區中,直到輸入回車 將回車也存到緩衝區中 才讀取緩衝區中的字元,而且若輸入了多個字元到緩衝區中,後面的字元不用按回車便會依次讀取到後序的getchar 中。2.scanf 的程式片段如下 char a,b,c,d scanf c a scanf c b s...

關於C語言裡getchar和scanf的思考

今天在做 c primer plus 的課後習題的時候,有這樣一道題 編寫乙個程式讀入一行輸入,然後反向列印該行。您可以把輸入儲存在乙個char陣列中 假定該行不超過255個字元。回憶一下,您可以使用具有 c說明符的scanf 從輸入中一次讀入乙個字元,而且當您按下回車鍵時會產生換行字元 n 按照題...

關於學習getchar 和scanf 時問題

一 getchar 函式 getchar 函式的原型為 int getchar void 該函式不帶形參,返回值為int型,成功時,返回值為字元的ascii碼,出錯是為 1.getchar 函式只對字元起作用,在stdio.h中定義,其實是個巨集定義函式,是getc stdin 的巨集定義。如果使用...