【C語言學習趣事】_30_《C程式設計語言》_Secnod_Edition_習題

來源:互聯網
上載者:User

  上一次的文字把Hello world程式說了一點,今天繼續就習題說道說道。

【1.5  字元輸入/輸出】

  K&R的C書裡面說過一段話:

      1、標準輸入輸出庫的輸出模型: 無論文本從何處輸入和輸出,其輸入和輸出都是按照字元流處理。

  2、文字資料流:文字資料流是由零行或者多行字元構成的字元序列,而每行文字則是由零個字元或者多個字元組成;而不管有沒有字元,行末尾則是一個

分行符號。

  標準庫的輸入和輸出函數都按照這個規則處理。

(1)回顯輸入的內容

  

  我的測試代碼,如上所示,測試情況如下所示,

  

  這裡有個問題,如果利用上面的代碼我們如何輸入  EOF  字元呢?   

  如上面的運行結果是:Ctrl + Z 的運行結果。在Linux中利用 Ctrl + D 類比表示輸入結束。

  但是是否是所有的情況下輸入 Ctrl + D  都能跳出迴圈呢?我看未必,在輸入的情況下需要分清楚情況。

【習題1.6】

  編寫程式驗證 getchar() != EOF 的值是1還是0.

  上面提到過EOF的輸入時有條件的,不同的作業系統具有不同的處理方式:

      Linux:

     1、在Linux中,如果在一行的最開始輸入:Ctrl  + D,則表示輸入EOF字元

        2、在Linux中,如果在一行的最後輸入:Ctrl + D ,則表示本行輸入結束,需要再輸入:Ctrl + D 才表示EOF

       Windows:

    在Windows中,也大體若是,但是輸入的按鍵組合不一樣,

        1、在Windows中,如果在一行的最開始輸入:Ctrl + Z ,則表示輸入EOF字元

        下面是園子裡的一篇新聞的描述:http://news.cnblogs.com/n/121416/

   下面是維基百科的說法:http://zh.wikipedia.org/wiki/EOF

         下面是我的測試代碼:

View Code

/*本程式驗證 getchar() != EOF 的值是 1 還是 0*/#include <stdio.h>int main(int argc,char* argv[],char* env[]){    short int chInput;    while(1)    {        if(getchar()!=EOF)        {            putchar('1');            break;        }        else            putchar('0');    }    getch(stdin);    return 0;}

【習題1.7】

  編寫一個列印EOF值的程式,在Windows下我用VS2008測試的時候,發現EOF的定義是在<stdio.h>標頭檔中定義,如下所示:

  這裡 EOF 的定義是 -1 ;

  測試代碼是:

/*    本程式列印EOF的值*/#include <stdio.h>int main(int argc,char* argv[],char* env){    printf("EOF = %d",EOF);    getc(stdin);    return 0;}

【習題1.8】

  編寫一個統計空格、定位字元和分行符號的程式。

  這裡我們需要知道的是:空格、定位字元和分行符號對應的ASCII碼即可,當然我們可以字元來表示。

/*    本程式用來統計空格、定位字元和分行符號的個數*/#include <stdio.h>int main(int argc,char* argv[]){    unsigned int nSpace,                 nTab,                 nNewLine;    int chInput;    nSpace=0;    nTab=0;    nNewLine=0;        while(EOF != (chInput=getchar()))    {        switch(chInput)        {        case '\n':            ++nNewLine;            break;        case '\t':            ++nTab;            break;        case '\x20':            ++nSpace;        }    }    printf("Space: %d\n",nSpace);    printf("Tab: %d\n",nTab);    printf("NewLine: %d",nNewLine);    return 0;}

  代碼中我沒有用字元 ' ' 來表示空格,而用了 '\x20' 是為了強調空格也是個字元,因為有人可能將‘\0' 和一些非顯示字元不當作字元看待。

【習題1.9】

  

   My Code如下所示:

/*    本程式用來回顯輸入,並將連續的多個空格用一個空格替代    */#include <stdio.h>#define YES 1#define NO 0int main(int argc,char* argv[]){    short int MultiSpace; //如果有一個空格就將MultiSpace設定為1    short int chInput;     while(EOF != (chInput=getchar()))    {        if('\x20' == chInput)        {               MultiSpace=YES;            continue;   //如果是空格的話,就繼續讀取下一個字元        }        else         {               if(YES==MultiSpace)            {                putchar('\x20');                MultiSpace=NO;            }            putchar(chInput);        }    }    return 0;}

  暫時就這些內容了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.