Обработка чтения файлов в c - PullRequest
0 голосов
/ 19 апреля 2020

У меня проблема с этой программой. Я пытаюсь отправить указатель на начало файла. Обычно это работает, но когда я отправляю файл из одной функции в другую, тогда fgets получает и пустую строку, а не первую строку в файле.

Вот код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int checkf(FILE *file, char*id){
    char row[255];
    int line_num = 1;
    int find_result = 0;
    char temp[255];

    while (fgets(temp, 255, file) != NULL){ // here i get an Empty 'temp'
                                            // so the contition is always false
        if((strstr(temp, id)) != NULL) {
            rewind(file);
            for (int i=1; i<(line_num-1); i++) {
                fgets(row, 255, file);
            }
            for (int i=0; i<4; i++) {
                fgets(row, 255, file);
                choppy(row);
                printf("%s",row);
                if (i!=3) {
                    printf(" ");
                }
            }
            find_result++;
        }
        line_num++;
    }
    return find_result;
}

void add(FILE *file, char fileName[20]){
    int check;
    char name[100], id[100] ;

    scanf("%s",name);
    scanf("%s",id);

    check = checkf(file,id);

    if(check==0){
        fputs("\n",file);
        fputs(name,file);

    }
}


int main(int argc, char * argv[]) {
    // insert code here...
    FILE *file;
    FILE *file_app;

    file_app= fopen(argv[argc-1], "a");
    file= fopen(argv[argc-1],"r");
    //check the there is a file
    if (file== NULL)
    {
        printf("Can't open file");
        return 1;
    }
    else
    {
        int cmd= strcmp(argv[1],"add");
        if (cmd==0) add(file_app,argv[2]);
        fclose(file);
        printf("\n");
        return 0;
    }
}

Итак, в заключение я думаю, что когда я вызываю функцию checkf() из функции add(), указатель файла теряется. Но когда я использую checks() напрямую, это работает. Есть идеи?

...