Язык C fscan не останавливается - PullRequest
0 голосов
/ 28 мая 2018

У меня есть этот код, и я хочу взять информацию из текстового файла, создать массив структур и сохранить их в новом bin-файле.Дело в том, что fscanf в то время не останавливается.TXT-файл выглядит следующим образом: «23A45 Lisboa 15.00 Coimbra 17.00 Aveiro 17.45 Porto 18.20»

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 20

struct paragem{
char local[TAM];
float hora;
};

int main()
{
FILE *f, *p;
struct paragem c;
char linha[TAM];

f = fopen("perc.txt", "rt");
if(f==NULL)
{
    printf("erro ao abrir ficheiro txt");
}
p = fopen("rota.bin", "wb");

if(p == NULL)
{
    printf("erro ao abrir ficheiro bin");
}
fscanf(f, "%s", &linha);
while(fscanf(f, " %s", &linha) != NULL )
{
    strcpy(c.local,linha);
    fscanf(f, " %f", &c.hora);
    fwrite(&c, sizeof(c), 2, p);
}
return 0;
}

1 Ответ

0 голосов
/ 28 мая 2018

fscanf возвращает количество совпадающих элементов или EOF (обычно это -1) в конце файла.Итак, вы хотите сказать

while(fscanf(f, " %s", linha) == 1 )

Поскольку NULL равен 0, а поскольку fscanf возвращает 1 при успешном совпадении и -1 при достижении конца файла, это, вероятно, объясняет, почему у вас было бесконечное числоloop.

Кстати, я также изменил ваш &linha на linha.Вам обычно нужно & для переменных, которые вы передаете scanf, , за исключением , когда вы читаете строки с %s.В этом случае, поскольку linha является массивом, указатель передается автоматически, без необходимости использования &.

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