亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4961 | 回復: 7
打印 上一主題 下一主題

[C] getchar()問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-02-23 11:21 |只看該作者 |倒序瀏覽
各位大俠好,

#include "stdio.h"
int main(void)
{
int ch1=getchar();
int ch2=getchar();
int ch3=getchar();
printf("%c%c%c",ch1,ch2,ch3);
return 0;
}
我遇到了以下的情況
我輸入a回車b回車,這樣就結束了,顯示的是a回車b;

getchar有一個int型的返回值.當程序調(diào)用getchar時.程序就等著用戶按鍵.用戶輸入的字符被存放在鍵盤緩沖區(qū)中.直到用戶按回車為止(回車字符也放在緩沖區(qū)中).當用戶鍵入回車之后,getchar才開始從stdio流中每次讀入一個字符.getchar函數(shù)的返回值是用戶輸入的第一個字符的ASCII碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕.如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區(qū)中,等待后續(xù) getchar調(diào)用讀取.也就是說,后續(xù)的getchar調(diào)用不會等待用戶按鍵,而直接讀取緩沖區(qū)中的字符,直到緩沖區(qū)中的字符讀完為后,才等待用戶按鍵.

如果按上面的解釋的話,我輸入a回車后應該馬上顯示出a回車來,為什么我輸入a回車后,還讓我繼續(xù)等待輸入b回車后才顯示結果出來呢?


還望高手解答一下我的疑惑。謝謝。

論壇徽章:
0
2 [報告]
發(fā)表于 2010-02-23 11:48 |只看該作者
當你輸入
'a'  -- ch1
<ENTER>  -- ch2
'b'  -- ch3
<ENTER>  (完成你的輸入)

論壇徽章:
0
3 [報告]
發(fā)表于 2010-02-23 11:53 |只看該作者
getchar()的觸發(fā)時機有:
在stdin中遇到'\n',即0x0A,或者遇到EOF,一個假想的字符,不存在,在bash下可用Ctrl+D產(chǎn)生這個信號。
當getchar()觸發(fā)時,它會從stdin的buffer中按序拿出一個字符,后續(xù)的getchar()就不需要被觸發(fā)了,一直拿直到拿完為止。
所以你終端中的鍵盤序列:a,[Enter],會使你的下兩句走完:

int ch1=getchar();
int ch2=getchar();

ch1讀到a,而ch2讀到回車產(chǎn)生的 0x0A

接下來的鍵盤序列:b,[Enter],會觸發(fā)第3個getchar():

int ch3=getchar();

但getchar()只取一個字符,所以ch3是b。
你可以繼續(xù)加第4個getchar(),如果我上面說的你理解的話,就能猜出它返回的什么了:stdin buffer中最后一個 0x0A

論壇徽章:
0
4 [報告]
發(fā)表于 2010-02-23 12:01 |只看該作者
本帖最后由 silon212 于 2010-02-23 12:22 編輯

對于EOF則比較特殊,它會使getchar()返回-1,這個問題可以參考我的一篇文章:從stdin讀取非字符數(shù)據(jù)問題總結

論壇徽章:
0
5 [報告]
發(fā)表于 2010-02-23 13:45 |只看該作者
謝謝大家的熱心答復。

論壇徽章:
0
6 [報告]
發(fā)表于 2010-02-23 15:34 |只看該作者
遇到過
就是回車問題

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
7 [報告]
發(fā)表于 2010-02-23 16:18 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
8 [報告]
發(fā)表于 2010-02-23 23:11 |只看該作者
不好意思,那是我自己的理解,希望不要誤人子弟,EOF是一種狀態(tài),輸入流來自文件時,由文件末尾觸發(fā),stdin時和終端有關系,大多l(xiāng)inux終端Ctrl+D可以產(chǎn)生。
getchar() 將流中的 char 提升到 int,因為0xFF也是有效地字符數(shù)據(jù),那就用0xFFFFFFFF(機器字長)來表示無效字符,即一種犯錯的狀態(tài),也就是#define EOF (-1),究竟是犯錯還是末尾,進一步可用ferror(),feof()來判斷。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP