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

C 語言 isalpha 返回值非布爾:非零即真導致統計邏輯誤判

     編輯:程式設計綜合問答

現象

輸入 aaaa,預期「字母數=4」,實際輸出「其他字符數=4」。

根本原因

  • isalpha(ch) 返回值規則:
    • 小寫字母 → 2
    • 大寫字母 → 1
    • 非字母 → 0
  • 代碼寫法 if (isalpha(a) == 1),小寫字母返回 2,條件為假,進入 else 分支計為「其他」。

正確判斷方式

// 方式一:利用 C 非零即真特性(推薦)
if (isalpha(a)) x++;
else if (isdigit(a)) y++;
else z++;

// 方式二:顯式判斷非零
if (isalpha(a) != 0) x++;
// 方式三:針對大小寫分開統計
if (isalpha(a) == 1) upper++;
else if (isalpha(a) == 2) lower++;

標準庫規範補充

C 標準規定 isalpha、isdigit 等返回非零表示真,零表示假,具體非零值由實現定義(常見:大寫 1、小寫 2)。切勿與具體數值比較。

完整修正程序

#include <stdio.h>
#include <ctype.h>
int main() {
    char ch;
    int letters = 0, digits = 0, others = 0;
    while ((ch = getchar()) != '\n') {
        if (isalpha(ch)) letters++;
        else if (isdigit(ch)) digits++;
        else others++;
    }
    printf("字母:%d,數字:%d,其他:%d\n", letters, digits, others);
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved