【发布时间】:2019-05-16 02:23:02
【问题描述】:
文本文件可写,结构后有 1 个空行。
类似于:
结构是:
struct estruturaCarro {
int id, potencia, avariado;
char name[11];
} carro;
我已将数据写入文本文件:
fprintf(fp, "%-2d %-3d %-1d %-10s \n\n", carro.id, carro.potencia, carro.avariado, carro.name);
我以这种方式读取文件数据,但我确信这不是最好的方式:
while(true){
int result = fscanf(fp, "%d %d %d %10[^\n]", &carro.id, &carro.potencia, &carro.avariado, &carro.name);
if(result==4){
printf("%-2d %-3d %-1d % -s\n", carro.id, carro.potencia, carro.avariado, carro.name);
}else break;
}
如何在不读取空行的情况下读取文本文件、保存数据结构?
如果我想验证值读取(ID = xx,potencia = xxx,avariado = x,name = 10个字符),是在填充struct数组之前还是之后更好?文件每一行的格式为:
xx xxx x aaaaaaaaaa(x = 数字,a = 字符)
例如,如果其中一行是9 123 4 Error 1st value
停止读取文件(通知用户),因为该行应该是:9 123 4 Error 1st value(9 之后缺少一个空格) - 或者因为 NAME 有超过 10 个字符。
【问题讨论】:
-
while( fscanf(fp, "%d %d %d %10[^\n]", &carro.id, &carro.potencia, &carro.avariado, carro.name) == 4) { printf("%-2d %-3d %-1d %-s\n", carro.id, carro.potencia, carro.avariado, carro.name); }似乎有效 -
或者更好,只需使用
fgets()然后sscanf进行解析。您可以检查该行中的第一个字符是否为'\n',只需continue即可在该点读取下一行。 -
10 个字符对于名称来说非常短。甚至我在 SO 上的名字也比这更长。