標準輸入stdin流工作方式

2021-05-12 23:26:20 字數 1465 閱讀 7852

stdin是c中的標準輸入流,它是緩衝輸入方式。

在程式中,當使用者呼叫stdin相關函式從鍵盤中獲取字元時,函式會先去緩衝區中檢視當前是否存在字元。如果存在,則會取出字元;如果不存在,則會中斷,提示使用者輸入。

使用者利用鍵盤輸入時,輸入的字元會依次被送到緩衝區中,在此處等待的輸入函式只有在使用者輸入了回車時,才會去緩衝區中取字元。

當重新整理緩衝區後,緩衝區會被清空。

當輸入函式從緩衝區中讀取

在c中標準輸入指的是鍵盤的輸入,stdin輸入就是從鍵盤上讀取字元。

stdin是緩衝輸入方式,使用者在鍵盤上輸入的字元會首先被送到乙個緩衝區中存放。在程式中呼叫

getchar函式是定義在 stdio.h 檔案中的乙個輸入函式。它從標準輸入裝置(一般是鍵盤)中讀取乙個字元。

在實際工作中,它是這樣完成的:

鍵盤輸入到計算機中的字元並不是立刻送到記憶體中指定位置,而是會首先快取到乙個緩衝區中。這個是計算機為了彌補不同硬體之間速度差距,而慣用的伎倆。

當在程式中第一次呼叫 getchar();時,函式會去緩衝區看當前是否存在字元,如果有,則會取出乙個字元,返回;如果沒有,那麼會提示使用者輸入。只有當使用者輸入了回車,此函式才會再次去緩衝區中取字元,並返回乙個字元。

getchar():

我們用getchar()在控制台上取字元的時候,它首先要把所有取得的東西按照順序放在記憶體的某個臨時的地方,但我們輸入回車時它會從這個地方開始在取字元,並按相同的順序取,當取到回車時就是上次輸入的最後乙個字元,注意我們在乙個程式裡不論用多少getchar(),它都會存放在同乙個地方,並且不斷的向後增加,然後在用getchar()取的時候會從上次取的後面繼續取,只要這個儲存的地方有字元,那麼我們用getchar()時控制台就不會停頓等待我們輸入字元,只有當取到換行時才是表示這個地方完全空了,下次在用getchar()的時候控制台才會停頓等待使用者輸入字元!

getchar()返回的是int型.

[code]

intc;while((c = getchar()) != eof)

[/code]

原因在於程式中的變數c被宣告為char型別,而不是int型別。這意味著c無法容下所有可能的字元,特別是,可能無法容下eof。因此,最終結果存在兩種情況。一種可能是:某些合法的輸入字元在被「截斷」後使得c的取值與eof相同;另一種可能是,c根本不可能取到eof這個值。對於前一種情況,程式將在檔案複製的中途終止;對於後一種情況,程式陷入乙個死迴圈。實際上,還有可能存在第三種情況:程式表面上似乎能夠正常工作,但完全是因為巧合。儘管函式getchar的返回結果在賦給char型別的變數c時會發生「截斷」操作,儘管while語句中比較運算的運算元不是函式getchar的返回值,而是「被截斷」的值c,然而令人吃驚的是許多編譯器對上述表示式的實現並不正確。這些編譯器確實對函式getchar的返回值作了「截斷」處理,並把低端位元組部分賦給了變數c。但是,它們在比較表示式中並不是比較c與eof,而是比較getchar函式的返回值與eof!編譯器如果採取的是這種做法,上面的例子程式看上去就能夠「正常」執行了。

AWK 怎麼讀取標準輸入(STDIN)

在 awk 系列中,我們將會看到幾個例子,你可以篩選其他命令的輸出代替從乙個檔案讀取輸入作為 awk 的輸入。我們首先從使用 dir 命令開始,它類似於 ls 命令。在第乙個例子下面,我們使用 dir l 命令的輸出作為 awk 命令的輸入,這樣就可以列印出檔案擁有者的使用者名稱,所屬組組名以及在當...

工作方式問題

連續幾天的開發培訓終於結束了,明天開始就要實踐了。今天的活動是一團糟。離開公司之前將thunderbird的郵件備份,僅是把原來備份的資料夾複製到預設目錄下,但是卻生成了幾個帶亂碼的收件箱資料夾,非常亂,還不能刪除。後來看了下,是自己把這個資料夾儲存成唯讀的。刪了原來的帳戶,重新新增,結果更是麻煩。...

OKR工作方式

1.okr的定義 okr,英文全稱 objectives and key results 中文意為 目標和關鍵成果 okr是一種工作方式和工作系統,據說可以讓目標管理從上到下貫穿到基層。這套方法和系統是由英特爾的老總安迪 葛洛夫 andy grove,只有偏執狂才能成功 的作者 發明的。隨後被由約翰...