读取包含不同类型的格式化文件
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,一些健壮的代码总是使用。
我正在尝试从以下格式的文件中读取:
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,一些健壮的代码总是使用。