在C语言中每次不循环地匹配文本

在C语言中每次不循环地匹配文本,c,string,file,file-io,C,String,File,File Io,我正在创建一个代码,不断从键盘读取输入,并将其与包含用户名的文本文件进行比较。文本文件中的每行仅包含一个名称。程序检测文本输入是否与行中的用户名匹配 我知道如何通过循环来实现。但是我不想每次都让循环遍历整个文件。我希望代码排除第一次检测到输入的情况 例如,如果第一次输入是Ben,而文本文件是 Ben Tom Albert Alex 我希望程序在第一时间循环并检测匹配的文本。 但在第二次中,如果输入不同,例如Alex,则程序仅从第二行开始循环,并将第一行排除在循环之外 下面是我在main函数

我正在创建一个代码,不断从键盘读取输入,并将其与包含用户名的文本文件进行比较。文本文件中的每行仅包含一个名称。程序检测文本输入是否与行中的用户名匹配

我知道如何通过循环来实现。但是我不想每次都让循环遍历整个文件。我希望代码排除第一次检测到输入的情况

例如,如果第一次输入是
Ben
,而文本文件是

Ben
Tom 
Albert 
Alex
我希望程序在第一时间循环并检测匹配的文本。 但在第二次中,如果输入不同,例如Alex,则程序仅从第二行开始循环,并将第一行排除在循环之外

下面是我在main函数中的一些代码

FILE * fp;
char Line[150];
char user[150];
printf("enter name: ");
fgets(user,150, stdin);
fp = fopen ("users.txt", "r");

if(fp == NULL)
    {
        perror("Error.. ");
        exit(EXIT_FAILURE);
    }

int line_start;
    while(!feof(fp))
    {
        fgets(Line, 150, fp);

        if (feof(fp))
            break;

        int store_start[150];
        long store_end[150];
        int i=0;


        if (strcmp(user, Line) == 0)
        {
            //printf("%s\n", "match found");
            fseek(fp, 0, SEEK_CUR); 
            long line_end = ftell(fp);
            line_start = line_end - strlen(Line);
            store_start[i]=line_start;
            store_end[i]=line_end;         
                printf("%s\n", "match found")           

                for (int i = 0; i < 150; ++i)
                {
                    if (line_start==store_start[i] && line_end==store_end[i])
                    {
                        //skipp reading
                        fseek(fp, 1, SEEK_CUR);
                        printf("%ld\n",ftell(fp) ); 

                    }

                }

            printf("start is %d end is %ld \n", store_start[i],store_end[i]);

        }

        i++;



    }   


我希望代码基本上跳过阅读这一行,跳转到下一行。

while(!feof(fp)){
为什么?问题是什么?这是循环直到到达文件结尾。.实际上,在这里你做得很好,就像你以后做的那样,
if(feof(fp))break
。你真正的意思是
while(fgets(…))
。不,它不会。它会再循环一次。(你只能在撞到墙后检测到你的头撞到了墙。)另外:你有两个变量名为
i
。一个是阴影,另一个是阴影。
if (line_start==store_start[i] && line_end==store_end[i])
                    {
                        //skipp reading
                        fseek(fp, 1, SEEK_CUR);
                        printf("%ld\n",ftell(fp) ); 
                    }