读取 .txt 文件中的文字不起作用 C
Reading words of a .txt file not working C
我想在 .txt 文件中搜索特定的词。
例如文件包含 "Jon Miller, Andy Miller, Apu McDawn"
我想在此文件中搜索 "Miller" 它发生的频率。
然后它应该显示数字 (num) "2"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int num =0;
char word[100];
char *string;
FILE *in_file = fopen("test.txt", "r"); //reading the words
if (in_file == NULL)
{
printf("Dataerror\n"); //if word not found
exit(-1);
}
else {
scanf("%s", word);
printf("%s\n", word);
while(!feof(in_file))//search for the word
{
fscanf(in_file,"%s", string);
if(!strcmp(string , word))//if hit a word
num++;
}
printf( "%d Hit \n" ,num );
}
return 0;
}
我的朋友,我刚刚将函数 strcmp 更改为 strncmp。
& 有用。
这两个函数都比较两个字符串。 strcmp() 将整个字符串向下比较到末尾,而 strncmp() 仅将 strings.nction strcmp 的前 n 个字符与 strncmp.
进行比较
他们 return 有点古怪。基本上它是字符串的差异,所以如果字符串相同,它将 return 为零(因为差异为零)。如果字符串不同,它将 return 非零;基本上它会找到第一个不匹配的字符并且 return 如果字符串中的字符小于单词中的相应字符则小于零。如果字符串中的字符大于单词中的字符,它将 return 大于零。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int num =0;
char word[100];
char *string;
FILE *in_file = fopen("ser.txt", "r"); //reading the words
if (in_file == NULL)
{
printf("Dataerror\n"); //if word not found
exit(-1);
}
else {
scanf("%s", word);
printf("%s\n", word);
while(!feof(in_file))//search for the word
{
fscanf(in_file,"%s", string);
if(!strncmp(string , word))//if hit a word
num++;
}
printf( "%d Hit \n" ,num );
}
return 0;
}
您还没有为 string
分配任何内存。变化
char *string;
到
char string[100];
或者动态分配内存
string=malloc(100);
并在使用后释放它
free(string);
也改
while(!feof(in_file))
至
while(fscanf(in_file,"%s", string))
并删除此循环体内的 fscanf
。阅读 this 以了解我为何进行此更改。并在您的程序中包含 string.h
。
我想在 .txt 文件中搜索特定的词。
例如文件包含 "Jon Miller, Andy Miller, Apu McDawn" 我想在此文件中搜索 "Miller" 它发生的频率。 然后它应该显示数字 (num) "2"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int num =0;
char word[100];
char *string;
FILE *in_file = fopen("test.txt", "r"); //reading the words
if (in_file == NULL)
{
printf("Dataerror\n"); //if word not found
exit(-1);
}
else {
scanf("%s", word);
printf("%s\n", word);
while(!feof(in_file))//search for the word
{
fscanf(in_file,"%s", string);
if(!strcmp(string , word))//if hit a word
num++;
}
printf( "%d Hit \n" ,num );
}
return 0;
}
我的朋友,我刚刚将函数 strcmp 更改为 strncmp。 & 有用。 这两个函数都比较两个字符串。 strcmp() 将整个字符串向下比较到末尾,而 strncmp() 仅将 strings.nction strcmp 的前 n 个字符与 strncmp.
进行比较他们 return 有点古怪。基本上它是字符串的差异,所以如果字符串相同,它将 return 为零(因为差异为零)。如果字符串不同,它将 return 非零;基本上它会找到第一个不匹配的字符并且 return 如果字符串中的字符小于单词中的相应字符则小于零。如果字符串中的字符大于单词中的字符,它将 return 大于零。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int num =0;
char word[100];
char *string;
FILE *in_file = fopen("ser.txt", "r"); //reading the words
if (in_file == NULL)
{
printf("Dataerror\n"); //if word not found
exit(-1);
}
else {
scanf("%s", word);
printf("%s\n", word);
while(!feof(in_file))//search for the word
{
fscanf(in_file,"%s", string);
if(!strncmp(string , word))//if hit a word
num++;
}
printf( "%d Hit \n" ,num );
}
return 0;
}
您还没有为 string
分配任何内存。变化
char *string;
到
char string[100];
或者动态分配内存
string=malloc(100);
并在使用后释放它
free(string);
也改
while(!feof(in_file))
至
while(fscanf(in_file,"%s", string))
并删除此循环体内的 fscanf
。阅读 this 以了解我为何进行此更改。并在您的程序中包含 string.h
。