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

  免費注冊 查看新帖 |

Chinaunix

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

弱弱的一個C問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-04-01 16:11 |只看該作者 |倒序瀏覽
本帖最后由 tiw 于 2012-04-01 18:46 編輯

例子是the c programming language 里的。
我不理解的是,運行程序后,當我輸入a后a并不馬上顯示到屏幕上,而是等我輸入了回車,才把之前輸入的所有字母一起顯示到屏幕上。
查了putchar的函數(shù)的解釋,說吧一個字符輸出到標準輸出(這里就是屏幕)上。為什么要我打了回車之后才輸出呢?

  1. #include <stdio.h>¬#include <stdio.h>
  2. main()
  3. {
  4.     putchar(97);
  5.     int c;
  6.     int i;
  7.     i = 0;
  8.     c = getchar();
  9.     while (c != EOF) {
  10.         i ++;
  11.         putchar(c);
  12.         c = getchar();
  13.     }
  14.     putchar(i);
  15. }
復(fù)制代碼
我預(yù)想的
a
a
b
b

實際
ab<cr>
ab


我以為有buffer,查了半天也沒查到
各位指點一下吧

http://www.chinaunix.net/jh/23/15862.html
http://www.360doc.com/content/09/0624/18/36491_4019078.shtml
http://www.360doc.com/content/10/1116/14/4640133_69822467.shtml

論壇徽章:
0
2 [報告]
發(fā)表于 2012-04-01 16:19 |只看該作者
while (c != EOF) {
        i ++;
        putchar(c);
        c = getchar();
    }


換行也是一個char

論壇徽章:
0
3 [報告]
發(fā)表于 2012-04-01 16:24 |只看該作者
你循環(huán)判斷里做的是:while (c != EOF)
這里的意思是,當main函數(shù)執(zhí)行到c = getchar()時,程序會停下來,等你輸入一些字符。當你輸入完字符后,你按回車,提交,等于說你是告訴操作系統(tǒng),我這次輸入已經(jīng)結(jié)束,這時候,main函數(shù)才會繼續(xù)走
不知道分析的對不對。。。我也是C新手

論壇徽章:
0
4 [報告]
發(fā)表于 2012-04-01 16:27 |只看該作者
slucx 發(fā)表于 2012-04-01 16:19
while (c != EOF) {
        i ++;
        putchar(c);

那我輸入ab的時候,顯示應(yīng)該為
aabb

論壇徽章:
0
5 [報告]
發(fā)表于 2012-04-01 16:32 |只看該作者
steven_2012 發(fā)表于 2012-04-01 16:24
你循環(huán)判斷里做的是:while (c != EOF)
這里的意思是,當main函數(shù)執(zhí)行到c = getchar()時,程序會停下來,等 ...
  1.         putchar(c);
  2.         c = getchar();
復(fù)制代碼
在getchar等下個char前putchar就該輸出了

是不是系統(tǒng)吧我之前輸入的都緩存了,知道我輸入<cr>他在吧這些一骨腦的給了main啊

論壇徽章:
0
6 [報告]
發(fā)表于 2012-04-01 16:33 |只看該作者
回復(fù) 2# slucx
輸入完后,打換行符,應(yīng)該是不會被讀入的。如果要輸入換行符,好像要用\n


   

論壇徽章:
0
7 [報告]
發(fā)表于 2012-04-01 16:37 |只看該作者
回復(fù) 5# tiw
我個人理解啊:
    首先當程序走到c = getchar() 的時候,main()會把控制權(quán)交給OS,這個時候,不管你輸入什么(只要不是輸入回車),都由操作系統(tǒng)接管該程序,最后,當你敲回車的時候,你就是告訴OS,我這次的輸入結(jié)束了,你可以把輸入的字符轉(zhuǎn)交給main()函數(shù)了,也就是說,main()應(yīng)該是看不到你輸入回車的。如果你要回車的效果,你可以再終端輸入\n試試


   

論壇徽章:
2
CU十二周年紀念徽章
日期:2013-10-24 15:41:34處女座
日期:2013-12-27 22:22:41
8 [報告]
發(fā)表于 2012-04-01 16:56 |只看該作者
回復(fù) 7# steven_2012


有這個意思,不過C語言層次上應(yīng)該更注重語意。

如果非要沿這樣說下去,Unix下的解釋是:讀tty時,硬件(驅(qū)動)報上的數(shù)據(jù)要經(jīng)過line discipline的處理,而在標準模式下,line discipline收集到一行輸入才會向用戶態(tài)傳輸,read才會返回。

論壇徽章:
0
9 [報告]
發(fā)表于 2012-04-01 17:04 |只看該作者
steven_2012 發(fā)表于 2012-04-01 16:37
回復(fù) 5# tiw
我個人理解。
    首先當程序走到c = getchar() 的時候,main()會把控制權(quán)交給OS,這個時 ...


這樣的解釋不太通,因為while里有個 c = getchar(), 如果每次到了這里就交給OS的話,返回的只是一個字符,被保存在了‘c' 里。putchar再把保存在c里的顯示出來,應(yīng)該就是一個字符啊,而不是回車前的所有字符。

論壇徽章:
0
10 [報告]
發(fā)表于 2012-04-01 17:18 |只看該作者
回復(fù) 9# tiw
這個應(yīng)該是C語言底層實現(xiàn)的吧,getchar()函數(shù)是從輸入讀取下一個字符,直到遇到EOF。getchar()函數(shù)不是也能作用于字符流麼。而且你那里也寫了while循環(huán)啊,getchar()每次從輸入流讀下一個字符,返回給c,然后由putchar()打印出來


   
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP