如果C中的语句总是返回false

时间:2015-04-17 12:45:35

标签: c if-statement strcmp c-strings

我是C的新手,所以我不太熟悉它的语法,但是我调试了我的代码并研究了正确的语法,而且它似乎是正确的,我也改变了范围变量,以查看是否导致错误。

if语句应该比较两个变量,它们都保存字符串,我甚至打印出两个变量以确保它们是相同的,但它仍然直接跳到if语句的else部分。任何人都可以给我任何关于为什么它不会运行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");
    }
}

7 个答案:

答案 0 :(得分:6)

无法使用==比较C中的字符串,因为这会比较字符串的地址,而不是字符串的内容。 (你当然不需要,显然,两个字符串的地址也不相等。)

C有一个相当不错的函数:strcmp()如果两个字符串相等则返回0

尝试在if条件中使用此功能:

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

在使用#include <string.h>之前务必strcmp()

答案 1 :(得分:4)

在C中,您无法使用==比较字符串。您将最终比较字符串的地址,这是不一样的。

你需要调用strmcp()函数,如果它的参数(两个字符串)相等,它将返回0

所以代码应该是if(strcmp(userWordGuess, correctWord) == 0)

答案 2 :(得分:3)

您正在比较不同阵列的地址,这些地址总是不相等的。

您需要使用strcmp或其他一些字符串库函数来逐字符地比较字符串。

答案 3 :(得分:2)

userWordGuess == correctWord将比较指针(即数组内存中的位置),这些指针可能不相等。

对于C中的字符串比较,请使用strcmp(或strncmp):

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

答案 4 :(得分: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

答案 5 :(得分: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 */

答案 6 :(得分:1)

你在这里做的是比较两个指针。 userWordGuess和correctWord将每个字符指向一个字符数组的开头(这是您在示例代码开头定义的)。

因此,如果要比较两个字符数组,可以使用string.h中定义的strcmp函数

学习数组和指针之间的关系非常重要。指针算术在这里也很重要。看看这个:Arrays, Pointers, Pointer Arithmetic