簡體   English   中英

為什么 isalpha 聲明給我一個錯誤代碼

[英]Why is the isalpha declaration giving me an error code

我正在嘗試使用<ctype.h>庫中的isalpha function。 我在不同文件中使用了其他庫中的其他函數,但我無法讓isalpha工作。 錯誤是:

test.c:9:21: error: expected ')'
    int isalpha(int c);
                ^

我正在處理的代碼:

// Function Declarations
int isalpha(int c);

int main(void) {
    char letter = get_char("Letter:");
    bool yesno = isalpha(letter);

    if (yesno == true) {
        printf("True\n");
    } else {
        printf("False\n");
    }
}

該庫包含在 header 中,我只是不知道如何在此處包含 header。

謝謝您的幫助

您應該只包含<ctype.h>而不是在代碼中使用顯式原型重新定義isalpha 您收到錯誤的原因是isalpha()可能被定義為<ctype.h>中的宏,並且該宏在編譯器解析您的原型時被擴展,擴展的結果是語法錯誤。

另請注意,不應使用char類型的參數調用isalpha() ,因為在默認情況下對char進行簽名的平台上,它對於負值具有未定義的行為。 char arguments 轉換為(unsigned char)以避免這種未定義的行為。

此外, isalpha的返回值是一個int ,值0表示 false,任何其他值表示 true。 比較isalpha(letter) == true是不正確的。 您的代碼依賴於intbool之間的 boolean 轉換,該轉換自 C99 起可用,但依賴此隱式轉換很容易出錯,因為這種微妙之處可能超出您的技能水平。

這是修改后的版本:

#include <ctype.h>
#include <stdio.h>
#include <cs50.h>

int main(void) {
    char letter = get_char("Letter:");

    if (isalpha((unsigned char)letter) {
        printf("True\n");
    } else {
        printf("False\n");
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM