C - 即使他应该进入也不进入

时间:2014-04-15 19:20:24

标签: c if-statement char compare

我现在很生气。我需要比较一个字符串和第二个字符串,当第二个字符串的字符可以以某种方式创建第一个字符串。实施例


foo1 = bill

foo2 = boril

foo2可以创建foo1,因为它包含来自foo1的所有字母。


所以这是我的计划:

secret = religion

lettersGuessed = religonvpst

for(i = 0; i < lenSecret; i++){  
    for(l = 0; l < lenGuessed; l++)
        printf("A: %c, B: %c, C: %d\n", secret[i], lettersGuessed[l], count);
        if(secret[i] == lettersGuessed[l]){
            printf("HI\n");
            count++;
            break;
        }
        printf("C: %d\n", count);
}

但变量 count 始终保持为0.这是从控制台输出的:

http://pastebin.com/YrHiNLNi

正如您从头开始看到的,当 secret [i] == lettersGuessed [l] if 应该返回true(1)时,它返回false(0) )。这有什么问题?为什么它不起作用?

2 个答案:

答案 0 :(得分:7)

这是因为你的第二个for循环之后没有花括号。如果不包含要用花括号迭代的代码块,则只会执行遇到第一个分号前的代码。在这种情况下,你的第二个循环将迭代printf语句,但没有别的。因此,当执行if语句并且第一个单词中没有字母与第二个单词的最后一个字母匹配时,变量l将始终等于lenGuessed,因此count永远不会递增。

答案 1 :(得分:0)

好的,这完全是疯了。

我在我的问题中发布的代码当然是错误的,因为我忘记了第二个for循环的大括号。我知道,虽然很小但是致命的错误,但我很生气,所以我没有注意。无论如何,原始代码如下:

int isWordGuessed(char secret[], char lettersGuessed[]){
    int i, l, count = 0;
    int lenSecret = strlen(secret);
    int lenGuessed = strlen(lettersGuessed);

    for(i = 0; i < lenSecret; i++)  
        for(l = 0; l < lenGuessed; l++)
            if(secret[i] == lettersGuessed[l]){
                count++;
                break;
        }

return lenSecret == count ? 1 : 0;

}

首先,它返回0.使用不同的工具编译并在两个不同的操作系统(Windows 7 64位和Windows XP 32位)上启动它后,我最终能够从该功能获得1。

似乎变量 count 在启动时具有非零值,因此我没有写入 int i,l,count; 我写了 i,l, count = 0;

好吧,现在我不能理解一件事 - 为什么有时候变量的值非零,即使我从未接触到它们。它发生在我以前,但只有在C,在其他语言中,我从来没有遇到过这样的问题。