在C中的if语句之后while循环不继续

时间:2018-07-29 01:20:24

标签: c

好吧,所以我目前遇到的问题是,如果不满足作为第5个参数键入“ -c”的条件,则while循环不会在第一个if语句之后继续。

如果键入-c,它将正常继续正常运行。这可能是一个菜鸟的错误,但即使条件不满足,我也无法弄清楚为什么它不会继续。如果需要,可以提供更多详细信息。

 while(fscanf(file, "%s", word) != EOF)
    {
        if (strcmp(argv[5], "-c") == 0);
            {
            // Convert word to lowercase
            strlwr(word);
            }

       //Remove last punctuation character
        len = strlen(word);
        if (ispunct(word[len - 1]))
            word[len - 1] = '\0';

        //Check if word exists in list of all distinct words
        unique = 1;
        for (i=0; i<index && unique; i++)
        {
            if(strcmp(words[i], word) == 0)
                unique = 0;
        }

        //If word is unique then add it to distinct words list
        //And increment index. Otherwise increment occurrence
        // count of current word.
        if(unique)
        {
            strcpy(words[index], word);
            counter[index]++;

            index++;
        }

        else
        {
            counter[i - 1]++;
        }
    }

2 个答案:

答案 0 :(得分:0)

经验法则是1可以用作布尔值true,0可以用作false。

因此,只需使用1和0以外的其他数字,或使用诸如unique == 3/any;

之类的条件检查条件

下面的代码将有助于理解为什么循环不起作用。

int main(int argc, char** argv) {

int i;

    printf("Hi, Enter any int : 1 or 0.\n");

scanf("%d",&i);

if(i){
    printf("Hi, see Without 0 it works.");
}
return 0;
}

答案 1 :(得分:0)

此行有两种错误之处:

if (strcmp(argv[5], "-c") == 0);

首先,您用分号结束if,以便测试是否 第五个参数是"-c",但是它将以任何一种方式运行下一个块。

如果您没有输入-c作为第五个参数,则可能只有 四个参数,在这种情况下,第五个参数将为NULL。 (要么 您可能少于四个,在这种情况下,没有第五个参数 完全没有。)将NULL传递给strcmp是未定义的行为。所以,你需要 在测试argv >= 5之前检查argv[5]