好吧,所以我目前遇到的问题是,如果不满足作为第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]++;
}
}
答案 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]
。