C语言fscan不会停止

时间:2018-05-28 04:07:07

标签: c input file-io

我有这个代码,我想从文本文件中获取信息并创建一个结构数组并将它们保存在一个新的bin文件中。问题是,fscanf in while并没有停止。 txt文件就像这样" 23A45里斯本15.00科英布拉17.00阿威罗17.45波尔图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 :(得分:3)

fscanf返回匹配的项目数,或者在文件末尾返回EOF(通常为-1)。所以你想说

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

由于NULL为0,并且因为fscanf在成功匹配时返回1而-1在它到达文件结尾时返回-1,这可能解释了为什么你有一个无限循环。

顺便说一下,我还将您的&linha更改为linha。当您使用&读取字符串时,通常需要scanf%s之外的变量。在这种情况下,由于linha是一个数组,因此指针会自动传递,而不必使用&