fgets не читает строку из файла - PullRequest
0 голосов
/ 28 декабря 2018

Я новичок в языке C и только начал работать с файлами.У меня есть код, который записывает некоторые значения из массива в файл, а затем я хочу напечатать все из файла.Однако, fgets ничего не получает от f.Строка s пуста.Что я делаю неправильно?Вот мой код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {

    FILE *f;
    if ((f=fopen("fis.txt","r+"))==NULL) { printf ("Error\n");
        exit(1);
    }

    float *v; int n;
    char s[1000];
    scanf("%d",&n);
    v=malloc(n*sizeof(float)); int x;
    for (int i=0;i<n;i++) {
        scanf("%f",&v[i]);
        x=fprintf(f,"%f\n",v[i]);

        if (x<0) perror("Error:");
    }

    fflush(stdin);
    fgets(s,sizeof(s),f); perror("err ");//NO ERROR
    printf("%d",strlen(s));//it's 0
    printf("%s",s);//nothing
    perror("err ");//NO ERROR
    printf("\n");

    free(v);
    fclose(f);
}

1 Ответ

0 голосов
/ 28 декабря 2018

Вы о чтении из файла, в который вы ранее записали.Каждый раз при переключении между чтением и записью необходимо либо очистить буфер, либо использовать fseek для правильного позиционирования указателя файла (см., Например, этот SO-ответ ).Обратите внимание, что вы сбрасываете stdin, что здесь не имеет смысла (и если это когда-либо имеет смысл, я не уверен).

Так что вызов типа

fseek(f,0,SEEK_SET)

передВаш первый fgets должен решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...