練習1-11 你準備如何測試單詞計數程序?若是程序中存在某種錯誤,那麼什麼樣的輸入最可能發現這類錯誤呢?函數
代碼以下:測試
#include <stdio.h> // 包含標準庫的信息。 #define IN 1 /* 在單詞內 */ #define OUT 0 /* 在單詞外 */ int main( void ) // 定義名爲main的函數,它不接受參數值。 { printf("======計數器程序======\n"); int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { // 字符計數器遞增。 ++nc; if (c == '\n') ++nl; // 換行計數器遞增。 // 若是遇到空格、換行符、製表符時,記錄下狀態。 // 若下一個字符不是這三個符號,則單詞計數器遞增。 if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("共%d行,共%d個單詞,共%d個字符。\n", nl, nw, nc); getch(); // 防止控制檯一閃而過,須要接受任意字符後在關閉控制檯。 return 0; // 向執行環境返回一個整形,0表明執行成功。 }
我的理解:spa
該程序中,字符計數器會把換行符'\n'也算做一個字符,而且直接輸入字符加EOF時,程序將不會終止。如圖所示:code
鍵入回車鍵後並不會終止程序。blog