2015-04-17 41 views
0

我是相當新的C,所以我不是太熟悉它的語法,但是我已經調試我的代碼,並研究正確的語法,這似乎是正確的,我也改變了變量的範圍以查看是否導致錯誤。如果用C語句總是返回false

if語句應該比較兩個變量,既保持琴絃,我甚至都印變量,以確保它們是相同的,但它仍然是跳過直奔if語句的其他部分。任何人都可以給我指出爲什麼它不會運行if語句,它只是直接跳到'不正確'。

correctWord變量在代碼中的一個不同的部分中定義。

找到完整的代碼here

-UPDATE-

現在我已經更新了代碼的語法,但它仍然是返回false。

Output screen

char correctWord[20]; 

void userGuess(){ 
    char userWordGuess[20]; 

    printf("Anagram: "); 
    printf(anagramWord); 
    printf("Your Guess: "); 
    scanf("%s",userWordGuess); //Reads in user input 

    printf(correctWord); 
    printf(userWordGuess); 

    if(strcmp(userWordGuess, correctWord) == 0){ 
     printf("Congratulations, you guessed correctly!"); 
    }else{ 
     printf("Incorrect, try again or skip this question"); 
    } 
} 
+5

使用'strcmp'或'strncmp'來比較字符串。 – ouah

+0

您不設置correctWord的值。比較應該是(strcmp(userWordGuess,correctWord)== 0){... – CoreyStup

+0

correctWord和userWordGuess是指針!它們代表您聲明的兩個20字節字符串的地址!因爲你想比較字符串,所以解決方案就像CoreyStup說的那樣! –

回答

6

無法使用C中==比較字符串,因爲這比較地址字符串,而不是字符串的內容。 (你當然不需要,很明顯,這兩個字符串的地址並不相同。)

C有一個相當不錯的功能:strcmp()如果兩個字符串相同,則返回0

嘗試在if條件使用此:

if (!strcmp(userWordGuess,correctWord)) 
{ 
    //Yay! Strings are equal. Do what you want to here. 
} 

使用strcmp()之前,請務必#include <string.h>

+0

謝謝你的幫助,我已經嘗試過,但它仍然返回false,在這裏找到完整的代碼http://codepad.org/EQoXktaS –

+0

@TobyCannon可能你沒有正確讀取用戶輸入。您需要放棄標準輸入的換行符。 – Lundin

3

你比較不同的陣列,這將永遠是不平等的地址。

您需要使用strcmp或其他一些字符串庫函數的性質比較字符串的字符。

2

userWordGuess == correctWord將比較指針,這可能是不相等的(即,在陣列的存儲器中的位置)。

對於C字符串對比,使用strcmp(或strncmp):

if (!strcmp(userWordGuess, correctWord)){ 
    /*Strings are equal*/ 
4

在C語言中,你可以使用==無法比較字符串。您將最終比較字符串的地址,這是不相同的。

您需要調用strmcp()函數,如果參數(兩個字符串)相等,則函數將返回0

所以代碼應該是if(strcmp(userWordGuess, correctWord) == 0)

+0

謝謝,試圖實現這一點,它仍然在所有時間都返回false? –

+1

@TobyCannon解釋在您的屏幕截圖中。其中一個字符串(使用'fgets()'從文件中讀取的字符串)以換行符結束,另一個不結束。 – unwind

1

使用

if(strcmp(userWordGuess, correctWord) == 0) // strings are equal 
{ 
     printf("Congratulations, you guessed correctly!"); 
} 
else // not equal 
{ 
     printf("Incorrect, try again or skip this question"); 
} 

如果兩個字符串比if條件將運行相等。否則西港島線運行else

1

字符串不是C語言中的一等公民。字符串表示爲字符數組或指向這些數組的指針。

在這兩種情況下,用於訪問字符串的變量都是字符串第一個字符的內存地址的同義詞。

你與userWordGuess == correctWord比較的不是字符串,而是他們在內存中的地址。由於userWordGuesscorrectWord是兩個不同的字符數組,它們在內存中的地址總是不同,並且它們的比較總是會產生FALSE

爲了比較實際的字符串值,您必須使用標準函數strcmp()或其變體之一(可在文檔頁面的底部找到它們)。

更改代碼:

/** Need to include the header that declares the strcmp() function */ 
#include <string.h> 

char correctWord[20]; 

void userGuess(){ 
    char userWordGuess[20]; 

    /** stripped some lines here ... */ 

    /** compare the strings, not their addresses in memory */ 
    if (strcmp(userWordGuess, correctWord) == 0) { 

    /** the rest of your code */ 
1

你在做什麼這裏是在比較兩個指針。 userWordGuess和correctWord指向每個字符數組的開頭(這是您在示例代碼開始處定義的內容)。

所以,如果你想字符的兩個數組比較,你可以使用string.h中

你學習數組和指針之間的關係是很重要的定義strcmp功能。指針算術在這裏也很重要。看看這個:Arrays, Pointers, Pointer Arithmetic