正如 elia 在 cmets 中提到的,最好的策略是阅读整行
然后用sscanf解析它。
char buffer[1024];
while(fgets(buffer, sizeof buffer, fp1))
{
if(sscanf(buffer,"%lf,%lf,%lf,%lf",&a,&b,&c,&d) != 4)
{
fprintf(stderr, "Invalid line format, ignoring\n");
continue;
}
printf("a: %lf, b: %lf, c: %ld, d: %lf\n", a, b, c, d);
}
另一种选择是继续阅读直到\n:
while(1)
{
if(fscanf(fp1,"%lf,%lf,%lf,%lf",&a,&b,&c,&d) != 4)
{
fprintf(stderr, "Invalid line format, ignoring\n");
if(clear_line(fp1) == 0)
{
fprintf(stderr, "Cannot read from fp1 anymore\n");
break;
}
continue;
}
printf("a: %lf, b: %lf, c: %ld, d: %lf\n", a, b, c, d);
if(clear_line(fp1) == 0)
{
fprintf(stderr, "Cannot read from fp1 anymore\n");
break;
}
}
clear_line 看起来像这样:
int clear_line(FILE *fp)
{
if(fp == NULL)
return 0;
int c;
while((c = fgetc(fp)) != '\n' && c != EOF);
return c != EOF;
}