2017-07-19 58 views
0

好的,所以我有一個for循環來檢查字符串的每個字母,以確保字符串完全由字母字符組成,然後再進入程序的下一個階段。如何使用isalpha結果來啓動if語句?

但是,如果「isalpha」函數返回false,那麼我的if語句會遇到問題。

string keyword = argv[1]; 
for (int i = 0; i < strlen(keyword); i++) 
{ 
    char letter = keyword[i]; 
    if (isalpha(letter) = false) 
    { 
     printf("Only use alphabetical characters in your key\n"); 
     return 1; 
    } 

我收到錯誤:

error: expression is not assignable if (isalpha(letter) = false)

我如何獲得一個if語句發起因是因而isalpha假?

以下情況如何?

if (isalpha(letter) = false) 
+8

它是'=='。或者只是'!isalpha(字母)'。 –

+0

我們不是人爲調試器,你應該自己修復編譯器問題。 – BetaRunner

+3

@BetaRunner它甚至不是調試器,但錯誤消息解析器... –

回答

1

How is the following wrong?

if (isalpha(letter) = false) 

嗯,這是一個分配=用於賦值,你不能分配一個值的函數調用(用於希望顯而易見的原因)

對值進行比較,使用==運營商C.

那說,當您已經有布爾值值時,根本不需要檢查與==的相等性。只寫:

if (!isalpha(letter)) 
3

您犯了一個錯字:if (isalpha(letter) = false)不是一個比較,而是一個任務。而應該寫:

if (isalpha(letter) == false) 

更常見的方式來寫,這是與!操作:

if (!isalpha(letter)) 

然而要注意isalpha()是未定義從EOF不同負值的行爲,如果char類型是有符號的,如果letter的值可以是負值。此問題已通過演員陣容更正:

if (!isalpha((unsigned char)letter)) 
+0

是的,但是'isalpha'和表親採用'int'。 –

+0

@WeatherVane:'isalpha()'和''的朋友需要一個'int',但只爲'unsigned char'類型的所有值和特殊的負值'EOF'定義。將一個負的'char'參數提升爲具有相同值的'int',除非碰巧與'EOF'相同,否則行爲是未定義的。如果'char'與'EOF'具有相同的值,則行爲被定義但可能不正確:對於字符集ISO-8859-1,'''具有值'-1',將被視爲'EOF',其通常被定義爲相同的值。它與'char c = getchar();'基本上是一樣的問題。 – chqrlie

+0

該字符的值必須作爲一個'unsigned char'傳遞,以使其有意義。 'char'可以默認簽名,但是無論何時在C庫中使用字符值,它都是被認爲是'unsigned char'的值:'strcmp()'比較字符串字節轉換爲'unsigned char' ,像'memcmp()'這個問題沒什麼問題,'getchar()'返回一個字節的值作爲'unsigned char','putchar()'將它的參數轉換爲'unsigned char'和返回......來自''的所有函數都需要無符號字符值或值'EOF'。 – chqrlie