繁体   English   中英

使用fscanf读取输入文件中线失败

[英]Using fscanf to read an input file fails mid-line

好久不见 我已经做了很多无济于事的挖掘工作,所以我会正确解决的...

我在C从事一个物理研究项目。 我正在尝试读取输入值文件...每行包含12个以空格分隔的double类型的值,并且输入文件长1006行。 由于文件输入是众所周知的,因此我选择使用fscanf()来摄取输入,执行操作以对其进行重新排序,然后将其输出到另一个更适合gnuplot使用的文件中。 这是问题行和有问题的行之前的行:

2.250000000000000 0.500000000000000 2.668878914693362 0.081121085306632 2.668879345525446 0.081120608880718 0.081120609109235 2.668879508723290 -1.139145600698256 -0.478208465494011 -0.476544273039587 -0.184392862164658
2.250000000000000 0.550000000000000 2.723599351123168 0.076400593002322 2.723599435547186 0.076400582995125 0.076400821024960 2.723599264264542 -0.996035795911154 -0.408011755823990 -0.409827430433329 -0.178196609653836

目前,我要做的只是读取文件并仅输出我所关心的内容,然后再添加更多逻辑,但是fscanf()出现了问题。 有关的相关代码如下(包括调试语句):

int readEOF = 0;
double maxThreePhaseParticleCount = 0.0;
double particlesATotal = 0.0;
double particlesBTotal = 0.0;
double rhoA1 = 0;
double rhoA2 = 0;
double rhoA3 = 0;
double rhoB1 = 0;
double rhoB2 = 0;
double rhoB3 = 0;

FILE * two_phase_coords;
char two_phase_coords_name[255];
sprintf(two_phase_coords_name,"~/threePhaseDiagram-densities-twoPhases_tcA%f_tcB%f_aA%f_aAB%f_aB%f.dat", tcA, tcB, aA, aAB, aB);
two_phase_coords = fopen(two_phase_coords_name, "r");

readEOF = fscanf(two_phase_coords, "%lf %lf %lf %lf %lf %lf %lf %lf %*lf %*lf %*lf %*lf", &particlesATotal, &particlesBTotal, &rhoA1, &rhoB1, &rhoA2, &rhoB2, &rhoA3, &rhoB3);
while (readEOF != EOF) {
    readEOF = fscanf(two_phase_coords, "%lf %lf %lf %lf %lf %lf %lf %lf %*lf %*lf %*lf %*lf", &particlesATotal, &particlesBTotal, &rhoA1, &rhoB1, &rhoA2, &rhoB2, &rhoA3, &rhoB3);
    printf("just read %i...\n%.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f\n", readEOF, particlesATotal, particlesBTotal, maxThreePhaseParticleCount, rhoA1, rhoB1, rhoA2, rhoB2, rhoA3, rhoB3);
}

问题行的第6个字段(1006中的第988行)是东西掉下来的地方...而不是读出0.076400582995125,而是读取值0.000000000000000 ... readEOF返回6,而不是预期的8,并且fscanf ()失败/在下一个循环迭代中返回EOF。

我很困惑。 我尝试过的东西

  1. 很多谷歌搜索。
  2. 从fscanf()更改为fgets()/ sscanf()...失败发生在完全相同的位置,其余18行仍未处理。
  3. 创建问题行之前和问题行之前的行的1000多个碳复本的虚拟输入文件...每个文件的处理已完成且没有错误。
  4. 用十六进制编辑器检查输入文件...问题行之前和之后的所有内容在我看来都像标准/预期的ASCII。
  5. 将每个输入行上的所有12个值读入单独的变量(即,不使用fscanf()中%* lf中的忽略字符)。
  6. 很多谷歌搜索。

我将不胜感激,因为我当了C语言大师已经很长时间了。 由于这是我的第一篇SO帖子,因此,如果我不小心踩踏了任何社区期望/礼节,请提前道歉。

谢谢您的帮助!!

因此,我不确定这种情况发生的频率,但是自然而然地,在我发布此问题之后,我便设法跟踪正在发生的事情...所讨论的功能是较大环境的一部分,并且对该功能的调用是在指向输入文件的文件指针已关闭(未定义的行为)。 我想自己投反对票。

谢谢大家的指教!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM