很长一段时间,第一次。我已经做了大量的挖掘,但无济于事,所以我会正确的...
我在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。
我很困惑。我尝试过的事情......
我会感激任何帮助......自从我成为C大师以来,已经很长时间了。因为这是我的第一篇SO帖子,如果我不小心踩到任何社区的期望/礼仪,请提前道歉。
感谢您的帮助!!
答案 0 :(得分:0)
所以我不确定这种情况发生的频率,但是在我发布这个问题之后,我自然会找到正在发生的事情......有问题的功能是更大环境的一部分,并且调用了这个函数在关闭输入文件的文件指针(未定义的行为)之前发生的事情。我想自己投票。
感谢大家的安慰!