gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:45:24 25 4
gpt4 key购买 nike

好久不见,第一次。我对此进行了大量的挖掘,但无济于事,所以我会立即开始......

我正在为一个物理研究项目使用 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 帖子,如果我不小心践踏了任何社区期望/礼仪,请提前道歉。

感谢您的帮助!!

最佳答案

有问题的函数是更大环境的一部分,并且对此函数的调用发生在指向输入文件的文件指针关闭之前(未定义的行为)。

关于c - 使用 fscanf 读取输入文件在中线失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com