c - 如何在C中读取和减去文件中不同行中的2个值

标签 c file double

我有一个txt文件,例如

19.39825343760206 , -99.20035242455288
19.402068553663323, -99.18884038346096
19.412830341813137, -99.18181299584194
19.420813944440887, -99.17626082318111
19.421929492669275, -99.17060940878673
19.423626831405098, -99.16279076950832
19.42586547013487,  -99.15465428846164
19.427341437102363, -99.14900153296276
19.42677988826859,  -99.14223767237945
19.426539585246708, -99.13745395260139
19.425789584581995, -99.13291163163467
19.42548983629902,  -99.12465713339134
19.428912245829306, -99.11943755464836
19.430273095215284, -99.11480135636612
19.42715425437469,  -99.10933367328926
19.423242338939442, -99.10226739363952

如何读取每行的第二个值然后减去 下一行的值,然后打印它,例如:

(-99.20035242455288)  -  (-99.18884038346096)
(-99.18884038346096)  -  (-99.18181299584194)  
(-99.18181299584194)  -  (-99.17626082318111)
...
(-99.10933367328926)  -  (-99.10226739363952)
??

我正在执行如下所示的函数,但不知道如何保留第一个值,然后保留第二行中的值...... 另外如何告诉 C 我想要第二个值(用逗号分隔)

void read_second_value (const char* file_name)
{
  FILE* file = fopen (file_name, "r");
  double i        = 0;
  double i_plus_1 = 0;
  fscanf (file, "%f", &i);    

  while (!feof (file))
  {  
      printf ("%f ", i);
      fscanf (file, "%f", &i);      
    }
  fclose (file);        
}

但是 我尝试过如下解决方案:

#include <stdio.h>
#include <stdlib.h>
int main()
{
  char* file_name = "C:\\test.txt";
  FILE* fp = NULL;
  double left_value, right_value = 0.0, prev_value = 0.0;

  if ((fp = fopen (file_name, "r")) == NULL) {
    printf ("FILE OPEN ERROR: %d\n", errno);
    exit (1);
  }
  if (fscanf (fp, "%lf, %lf", &left_value, &right_value) != 2)
    printf ("WARNING: failed to read two values...\n");
  else
    printf ("left_value: %lf, right_value: %lf ", left_value, right_value);
  while (!feof (fp))
  {
      prev_value = right_value;
      if (fscanf (fp, "%lf, %lf", &left_value, &right_value) != 2)
        printf ("WARNING: failed to read two values...\n");
      else {
        printf ("left_value: %lf, right_value: %lf ", left_value, right_value);
        printf ("%lf - %lf = %lf\n", prev_value, right_value, prev_value - left_value);
      }
    }
  fclose (fp);
  return 0;
}

但得到无限

WARNING: failed to read two values...

最佳答案

只要修复第一行,此示例代码就可以工作:

好:xxx.00,yyy.00 错误:xxx.00,yyy.00

#include <stdio.h>
#include <errno.h>

int
main (int argc, char *argv[])
{
  FILE* fp = NULL;
  int ct = 0;
  double left_value, right_value = 0.0, prev_value = 0.0;

  if (argc != 2) {
    printf ("USAGE: %s <filename>\n", argv[0]);
    return 1;
  }

  if ((fp = fopen (argv[1], "r")) == NULL) {
    printf ("FILE OPEN ERROR: %d\n", errno);
    return 1;
  }

  ct = fscanf (fp, "%lf, %lf", &left_value, &right_value);
  if (ct != 2) {
    printf ("WARNING: failed to read two values...\n");
    return 1;
  }

  while (!feof (fp)) {
      prev_value = right_value;
      ct = fscanf (fp, "%lf, %lf", &left_value, &right_value);
      if (ct == 0) {
        printf ("End of file...\n");
      }
      else if (ct != 2) {
        printf ("WARNING: failed to read two values...\n");
      }
      else {
        printf ("left_value: %lf, right_value: %lf ",
          left_value, right_value);
        printf ("%lf - %lf = %lf\n",
          prev_value, right_value, prev_value - left_value);
      }
  }
  printf ("Closing file...\n");
  fclose (fp);
  return 0;
}

第一行第一个数字后面有一个“空格-逗号-空格”;其余所有行都有一个“逗号空格”。

如果你想使用“scanf”,你必须有一个一致的数据集。

如果您想要更强大的解析,那么您应该:

1) 每行“fgets()”

2) 使用“strchr()”(首选)或“strok()”(不推荐)等函数来解析各个标记(每行 3 个标记:第一个数字、逗号和第二个数字)。

关于c - 如何在C中读取和减去文件中不同行中的2个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694736/

相关文章:

python - 在 Python 中的两个给定路径之间查找公共(public)文件的有效方法

mysql - VB NET - 查询 Mysql - 在哪里\

c - GtkTreeView - 将用户数据设置为一行

c++ - 如何从文件中读取某一行并从下面的那一点开始读取,在 C++ 中?

c - 从文件中保存变量?

iphone - ios 游戏中心提交时间并在排行榜中显示

java - 尝试比较字符串和 double

c - 跟踪 C 中数字的连续重复

c++ - 如何以 2³² 为基数表示数字?

Java 和 C 集成 - 运行应用程序