作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好久不见,第一次。我对此进行了大量的挖掘,但无济于事,所以我会立即开始......
我正在为一个物理研究项目使用 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 帖子,如果我不小心践踏了任何社区期望/礼仪,请提前道歉。
感谢您的帮助!!
最佳答案
有问题的函数是更大环境的一部分,并且对此函数的调用发生在指向输入文件的文件指针关闭之前(未定义的行为)。
关于c - 使用 fscanf 读取输入文件在中线失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123029/
我是一名优秀的程序员,十分优秀!