我已经仔细阅读了所有相关问题,以量化文本文件中单词的出现,我仍然无法执行此操作并对单词进行计数。我没有收到错误,但返回的输出是:
文件已打开 字符数= 0 4195872
“file.txt”中有6个单词“CORRESPONDENCE”,我只需要计数器返回值6.任何帮助都会非常感激。
#include <stdio.h>
#include <stdlib.h>
int main(){
int counter;
int ch;
int str;
FILE *input;
input = fopen ("file.txt", "r");
if (input == NULL)
{
printf("File failed to open \n");
}
else
{
printf("File opened \n");
do {
str = fgetc(input);
// if ((char*)str == keyword) counter++;
if (str == ch)counter++;
} while (str != EOF);
printf("character count = %i %i\n", counter, ch );
fclose(input);
}
return 0;
}
答案 0 :(得分:1)
您没有初始化ch
和计数器变量。所以他们可以有任何令人惊讶的价值观。
因此,获得结果4194872并不奇怪。
您犯的另一个严重错误是您的程序实际上从未计算“对应”一词的出现次数。在你的程序中,变量str只能表示一个字母,但不能表示单词。因此,当您使用str == ch
来测试是否存在“对应”一词时,您实际上是在测试字母是否等于c
。(只有当您拥有时才会这样)正确初始化了str
变量。为清楚起见,最好将str
声明为char
类型而不是int
类型。)
比较单词之间的正确方法是逐个比较它们的字母。如果任何字母不合适,则返回false。
阅读此代码以了解比较过程。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE * file = fopen("file.txt","r");
if(file == NULL) {printf("File not open"); return -1;}
char* str ="correspondence"; //Declare str as an array and initiate it with your word
char input[50]; //Declare an char array long enough to hold ordinary words
int i;
int count = 0;
while(fscanf(file,"%s",input) != EOF)
{
for(i = 0;i < strlen(str) && i < strlen(input) ;++ i)
{
if(input[i] != str[i]) break;
else i++;
}
if(i >= strlen(str) && strlen(str) == strlen(input))
count++;
memset(input,0,sizeof(input));
}
printf("word count = %d",count);
return 0;
}
答案 1 :(得分:1)
您需要在比较之前初始化ch。