首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言統計字符類型:EOF 處理導致 ^Z 需跟字符才輸出

     編輯:程式設計綜合問答

現象

程序統計數字、字母、其他字符,以 EOF 結束。按換行後輸入 ^Z (Windows EOF) 無輸出,必須跟在字符後才觸發。

原因

  • Windows 控制台:行首輸入 Ctrl+Z 視為 EOF(返回 -1),循環結束。
  • **行中輸入 Ctrl+Z 視為普通字符(ASCII 26)**,進入 else x[11]++,循環繼續,需再次行首輸入 Ctrl+Z 才結束。

代碼關鍵點


int c = getchar(); // 返回 int,可容納 EOF(-1)
if (c == EOF) break; // 正確判斷 EOF
// 原代碼用 c == 26 判斷 Ctrl+Z,錯誤!

修正建議


#include <stdio.h>
int main() {
    int c; // 必須用 int 接收 getchar()
    int digits[10] = {0}, letters = 0, others = 0;
    while ((c = getchar()) != EOF) { // 正確 EOF 判斷
        if (c >= '0' && c <= '9') digits[c - '0']++;
        else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) letters++;
        else others++;
    }
    // 輸出統計...
    return 0;
}

關鍵知識

  • getchar() 返回 int,**必須用 int 變量接收**,char 會截斷 EOF(-1) 變 255。
  • EOF 在文件中為真正結束標記;控制台模擬 EOF 需行首輸入 Ctrl+Z (Windows) / Ctrl+D (Linux/Mac)。
  • 避免硬編碼 26,移植性差。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved