我是C的新手,最近完成了我的文件工作。我试图创建一个程序,它会在文件中找到一个输入的名称,但它不起作用。你能尝试修理吗?我会感恩的。
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fr;
int i,p,counter,final,length,j,c,k = 0;
char name[256];
char buffer[1024];
fr = fopen("C:/Users/prixi/Desktop/HESLA.TXT","r");
while ((c = fgetc(fr)) != EOF)
counter++;
printf("Enter the name");
scanf("%s",&name);
length = strlen(name);
while (fscanf(fr, " %1023[^\n]", buffer) != EOF) {
for (i = 0; i <= counter; i++)
if (name[0] == buffer[i]){
for (j = 0;j < length; j++ )
if (name[j] == buffer[i+j])
p++;
else
p = 0;
/* The 2nd condition is there because after every name there is ' '. */
if (p == length && buffer[i+j+1] == ' ')
final = 1;
}
}
if ( final == 1 )
printf("its there");
else
printf("its not there");
return 0;
}
它将文件内部加载到缓冲区,然后根据文件的长度按char扫描char。我知道它效率低而且速度慢,但我只用了4天才学习C语言。我真的希望你帮我修理自己的代码:D我可能无法入睡。
答案 0 :(得分:3)
有很多方法可以将字符串搜索到文件中。 试试这个:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *loadFile(const char *fileName);
int main (void) {
const char *fileName = "test.txt";
const char *stringToSearch = "Addams";
char *fileContent = loadFile(fileName);
if (strstr(fileContent, stringToSearch)){
printf("%s was Found\n",stringToSearch);
}else{
printf("%s was not Found\n",stringToSearch);
}
free(fileContent);
return 0;
}
char *loadFile(const char *fileName){
size_t length,size;
char *buffer;
FILE *file;
file = fopen (fileName , "r" );
if (file == NULL){
printf("Error fopen, please check the file\t%s\n",fileName);
exit(EXIT_FAILURE);
}
fseek (file , 0 , SEEK_END);
length = (size_t)ftell (file);
fseek (file , 0 , SEEK_SET);
buffer = malloc(length+1);
if (buffer == NULL){
fputs ("Memory error",stderr);
exit (2);
}
size = fread (buffer,1,length,file);
if (size != length){
fputs ("Reading error",stderr);
exit(3);
}
buffer[length] = '\0';
fclose (file);
return buffer;
}
输出:
发现了Addams
我在文件“test.txt”中有以下内容:
Michael Jackson Bryan Addams Jack Sparrow
答案 1 :(得分:0)
您的代码存在多个问题。您没有发布变量定义,因此我们无法验证它们是否一致使用,尤其是name
应该是char
的数组。
主要问题是:您通过读取来计算fr
中的字节数,但在扫描字符串实例之前,您没有rewind
流。