我有这段代码,我想从文本文件中获取信息并创建一个结构数组并将它们保存在一个新的 bin 文件中。问题是, while 中的 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;
}
最佳答案
fscanf
返回匹配的项目数,或文件末尾的 EOF(通常为 -1)。所以你想说
while(fscanf(f, " %s", linha) == 1 )
由于 NULL 为 0,并且 fscanf
在成功匹配时返回 1,在到达文件末尾时返回 -1,这可能解释了为什么会出现无限循环。
顺便说一句,我还将您的 &linha
更改为 linha
。通常,您在传递给 scanf
的变量上需要使用 &
,异常(exception),当您使用 %s
读取字符串时>。在这种情况下,由于 linha
是一个数组,因此会自动传递指针,而无需使用 &
。
关于C语言scanf不停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558992/