以下代码旨在从用户选择的文本文件中查找单词“if”的出现次数,但退出循环后的结果始终为0.问题是如何修复它。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main() {
FILE * f;
int count = 0, i;
char buf[50], read[100];
printf("Which file to open\n");
fgets(buf, 50, stdin);
buf[strlen(buf) - 1] = '\0';
if (!(f = fopen(buf, "rt"))) {
printf("Wrong file name");
} else printf("File opened successfully\n");
for (i = 0; fgets(read, 100, f) != NULL; i++) {
if (read[i] == 'if') count++;
}
printf("Result is %d", count);
getch();
return 0;
}
答案 0 :(得分:3)
'if'
不是您认为的;它是一个多字符文字,而不是字符串。
您无法将字符串与C中的==
进行比较。使用strcmp(3)
。
你的循环看起来不像你想要的那样;是时候打破调试器了(可能是strtok(3)
)。
答案 1 :(得分:2)
你的测试是错误的。
if (read[i]=='if') /* no */
使用strcmp
if (strcmp(read[i], "if") == 0) /* check if the strings are equal */
答案 2 :(得分:0)
首先,read[i]
只包含一个字符,永远不会等于任何多字符字。
另一方面,单撇号用于定义单个字符。 'if'
不是一串字符。
您需要解析每一行以查找每个单词,然后使用类似stricmp()
的内容将每个单词与目标单词进行比较。