C 教材:if

現在要寫一個程式來判斷一個由 stdin 輸入的純文字檔有幾行 (或說幾列)。 方法就是記錄一共有幾個 LF 字元出現。 即使空行也算一行。


#include <stdio.h>
 
/* 簡化的 UNIX wc -l 程式  (nl.c) */
main() {
   int c, nl=0;
 
   while((c = getchar()) != EOF)
       if (c == '\n')
           ++nl;
   printf("%d\n", nl);
}

在以上的宣告指令中,我們很自然地使用了 , 符號。 其實逗點也是一個運算符號,但是暫時不必詳細研究它。 現在,我們就暫時不解釋它,就將它當作一個直覺可以使用的符號。 我們可以用它在一個指令中,宣告許多個同樣型態的資料。

if 也是一個流程控制結構。它的基本形式是

    if (CONDITION)
        STATEMENTS_;
其中 CONDITION 是一個邏輯計算語句, STATEMENTS_ 是若干指令。 它們的規定,都和 whilefor 中的 CONDITIONSTATEMENTS_ 完全相同。 C 會檢查 CONDITION 是否成立,若成立,執行 STATEMENTS_。 否則直接跳去執行 STATEMENTS_ 的下一個指令。 在前面的例子中,ifSTATEMENTS_ 只有一個指令,所以不必放在 { } 內。 而整個 if 算做一個指令,所以 whileSTATEMENTS_ 也只有一個指令, 所以也不必放在 { } 內。

C 語言用 'x' 表示一個字元的字碼。而 \n 代表 LF 字元, 所以 '\n' 就是它的字碼,通常也就是 ASCII 碼第 10 號。

習題

  1. 怎樣使用 putchar() 輸出一個 LF 碼?至少說出兩種方法。
  2. 編譯 nl.c,並執行它。如何測驗它的結果是否正確?
  3. 以下語句的結果 n 是多少?
        n = 'B' - 'A';
    
  4. 以下語句的結果 n 是多少?
        n = 'A' - 65;
    
  5. 寫一個程式,從 stdin 輸入一個純文字檔, 輸出那個檔案內共有幾個空格、幾個 tab、幾列。
  6. 寫一個程式,從 stdin 輸入一個純文字檔, 將那個檔案內的空格和 tab 都刪除,其他字元都照原樣輸出。
  7. 寫一個程式,從 stdin 輸入一個純文字檔, 將那個檔案內的空格都輸出 \b (兩個字元)、 tab 都輸出 \t、\ 都輸出 \\,其他字元照原樣輸出。
[BCC16-C]
單維彰 (2000/03/30) ---
[Prev] [Next] [Up]