读取包含不同类型的格式化文件

Reading formatted file containing different types

我正在尝试从以下格式的文件中读取:

12,6:23.4

我需要分别收集 12、6 和 23.4,但我似乎无法绕过逗号和冒号。

这是我的尝试:

int x = fscanf(fp, "%d %[^,] %d %s %f", &int_var, comma_buffer, &int_var_2, colon_buffer, &float_var);

但我得到的垃圾输出如下:

int_var_1: 12

Comma_buffer: ��#� 

int_var_2:  0.000000 

colon buffer: , 

float_var: 0.000000

"%d,%d:%f"等格式中使用','':'。考虑前面的 space 以容忍固定字符前的可选白色-space:"%d ,%d :%f".


从文件中读取 的最佳方法是 fgets(),然后解析。

考虑使用 " %n" 检测尾随垃圾。

#define LINE_SZ 100
char buf[LINE_SZ];

if (fgets(buf, sizeof buf, fp)) {
  int n = 0;
  sscanf(buf, "%d ,%d :%f %n", &int_var, &int_var_2, &float_var, &n);
  if (n == 0 || buf[n]) {
    puts("failed to parse all or extra junk.");
  } else {
    printf("%d,%d:%f\n", int_var, int_var_2, float_var);
  }
}

"%[^,]""%s" 都应该 永远不会 被使用,因为它们缺少 width,一些健壮的代码总是使用。