1. 程式人生 > >關於getchar()讀取,EOF和CTRL+Z的一些理解

關於getchar()讀取,EOF和CTRL+Z的一些理解

近日做了一個實驗,主要是關於getchar()接收讀取,EOF和CTRL+Z的一些問題:

//測試getchar()讀取問題 
#include <stdio.h>
int main()
{
    int c = 0;
    int i = 0;
    while((c = getchar())!= EOF)
    {
        printf("int c:%d\n",c);
        i++;
    }
    printf("int c:%d\n",c);
    printf("scanf()讀取次數:%d",i);
}

我一共進行3次輸入:
1) 我輸入123時
執行結果如下:這裡寫圖片描述


2)當我輸入CTRL+z時:
執行結果如下:這裡寫圖片描述
3)當我輸入123^z456時:這時有些複雜,我發現getchar()在第一次讀入CTRL+Z時並沒有返回EOF,而是在我第二次按下CTRL+Z時程式才結束:

這裡寫圖片描述



於是乎我得出了一下幾種幾種結論:
1) CTRL+Z並不能夠簡單地看作是EOF,它出現在不同的地方會有作業系統不同的解釋形式,但是EOF一定是被標記為一個特殊的常量。
2) 一般來說getchar()在程式結束輸入時,也就是按下了CTRL+Z後,CTRL+Z會被解釋為EOF
3) getchar()的輸入會全部放到鍵盤緩衝區裡時,按下回車後’\n’(也會放進去)才會開始讀取字元,CTRL+Z會清空鍵盤緩衝區,結束輸入。

相關推薦

關於getchar()讀取EOFCTRL+Z一些理解

近日做了一個實驗,主要是關於getchar()接收讀取,EOF和CTRL+Z的一些問題: //測試getchar()讀取問題 #include <stdio.h> int main(

【Linux】- 對findxargsgrep管道的一些理解

問題 相信大家都知道在目錄中搜索含有固定字串檔案的命令: find . -name '*.py' |xargs grep test 剛開始的時候,我不熟悉xargs命令,所以直接使用的命令是: find . -name '*.py' |grep test 結果並不是自己所期望的。

談一談getchar()、EOFCtrl+D

getchar()   getchar從stdio流中讀字元,getchar有一個int型的返回值.當程式呼叫getchar時.程式就等著使用者按鍵.使用者輸入的字元被存放在鍵盤緩衝區中.直到使

ctrl+c ctrl+z 的區別

狀態 文件 沒有 shel 任務 但是 重新啟動 簡單的 例如 ctrl+c 和 ctrl+z 的區別 ctrl+c和ctrl+z都是中斷命令,但是他們的作用卻不一樣. ctrl+c是強制中斷程序的執行, 而ctrl+z的是將任務中斷,但是此任務並沒有結束,他仍然在進程中他

對findxargsgrep管道的一些深入理解

發送 文件名 rgs rom 輸入 很多 () option 理解 轉自於:http://fatmouse.xyz/2016/05/10/2016-05-10-find-grep-xargs-and-pipe/ 問題 相信大家都知道在目錄中搜索含有固定字符串文件的命令:

CSV檔案的讀取TensorFlowpandas

csv檔案的讀取,有兩種方法:呼叫pandas庫函式或者直接用TensorFlow讀取, 1、呼叫pandas data.csv是自己隨便搞的一個數據檔案,資料樣例和讀取程式碼如下: import tensorflow as tf import pandas as pd def

《譯文:RabbitMQ關於吞吐量延遲頻寬的一些理論》

原文連結 譯者:flystarfly 該文閱讀自RabbitMQ官方網站,分享好文給大家 你在Rabbit有一個佇列,然後一些消費者從這個佇列中消費。如果你根本沒有設定QoS(basic.qos),那麼Rabbit會把所有的佇列訊息都按照網路和客戶端允許的速度推送給客戶端。消費者將會飛速增加它

RabbitMQ關於吞吐量延遲頻寬的一些理論

    該文閱讀自RabbitMQ官方網站,分享好文給大家    你在Rabbit有一個佇列,然

對servletspringmvcStruts2的一些比較看法

Tomcat處理一個http請求的過程:http://localhost:8080/test/index.jsp1. 請求傳送到8080埠,被connector監聽到,建立request和response物件用來請求交換資料,並建立新的執行緒處理這個請求2. Connecto

vim檔案時誤用了ctrl+z命令該怎麼辦?

linux中,當正在使用vim命令編輯檔案,退出時,如果誤使用了 ctrl+z ,當前目錄中會多一個隱藏檔案。 比如我正在編輯 t.txt 檔案時,誤以為我之前使用的是 tail 命令,直接使用 ctrl+z 命令退出。 但是就用錯了,那麼當前目錄就會多一個隱藏檔案 當再次編輯 t.txt 檔案時,就會提

關於xhrajax的一些理解

程序 理解 button 之前 傳輸 另一個 frame 存在 繼續 我對ajax的理解。Ajax只是封裝了xmlhttprequest重新開啟了一個線程。對返回值,做出了響應。而如果我們不用xhr的異步的話,而只用同步的話,我們對這個請求,未完成之前,不能發出下一個請求。

關於 static final 的一些理解

初始 標記 private 關於 mage final 統計 內部類 對象創建 ---恢復內容開始--- 今天主要回顧一下 static 和 final 著兩個關鍵字。 1. static - 靜態 修飾符 - 用於修飾數據(變量、對象)、方法、代碼塊以及內部類。

對php裡的SessionCookie的一些理解

Cookie是客戶端的儲存空間,由瀏覽器來維持。具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於才伺服器端保持狀態的方案在客戶端也需要儲存一個標識,所以session機制可能需要藉助於cookie機制來達到儲存標識的目

同是ZooKeeper架構師的理解差在哪裡?

前言 提到ZooKeeper,相信大家都不會陌生。Dubbo,Kafka,Hadoop等等專案裡都能看到它的影子。但是你真的瞭解 ZooKeeper 嗎?如果面試官讓你給他講講 ZooKeeper 是個什麼東西,你能回答到什麼地步呢? 而且,

【思維方式】同是ZooKeeper架構師的理解差在哪裡?

##前言 提到ZooKeeper,相信大家都不會陌生。Dubbo,Kafka,Hadoop等等專案裡都能看到它的影子。但是你真的瞭解 ZooKeeper 嗎?如果面試官讓你給他講講 ZooKeeper 是個什麼東西,你能回答到什麼地步呢? 而且,同樣是ZooKeeper,一線架構師和你

剛開始學python對指令碼語言的一些理解

指令碼語言和程式語言的區別:        簡單來說,程式語言需要編譯再執行,指令碼語言不需要編譯,會直接執行。所以說,指令碼語言,即使錯了,也可以執行,因為一行一行執行,直到錯的那一行才開始報錯。但是程式語言如果錯了的話,編譯階段會顯示錯誤,沒辦法執行。        編譯

libcotornado、協程非同步的一些理解

看了些libco的實現,感覺和tornado差不多,基本的思想還是線上程被阻塞的時候能夠去做其他的事情,此時還是用epoll來排程掛起和恢復 從這點看協程依然是基於非同步的,且是純非同步的,只是協程框架提供了更好的語義表達,程式碼書寫更方便了,因此,協程的使用也是用在有一

Git 學習過程中遇到的一些自己的一些理解

Git 在向遠端倉庫提交時出錯 我們看到的很多的git教程中都會先教你如何新建github倉庫,但是這裡有一個坑,就是,新建倉庫時勾選了Initialize this repository with a README,即為倉庫初始化一個README.md檔案,但是如果這樣的

網路傳輸協議(UDPTCP的一些理解

網路通訊 UDP 1.1 網路通訊的概念 兩臺機器進行通訊 1.2 ip地址 1.1 什麼是地址 飛秋通訊能夠準確的給想要的人傳送訊息每個人都有一個唯一的ip地址 ip地址:目的用來標記網路上的一臺電腦 1.2 ip地址的作用

關於S3C2440開發板Nand flash程式燒寫執行的一些理解

這兩天剛開始學習ARM9的裸機程式設計和Linux系統移植,在燒寫Nand flash記憶體的時候對一些指定的地址產生了疑惑。 我看過很多教學視訊,他們在燒寫程式到Nand flash的時候一般會指定一個地址0X3000_0000,而S3C2440的官方手冊上指明瞭0X30