我正在嘗試從以下格式的檔案中讀取:
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
uj5u.com熱心網友回復:
使用','和':'等格式"%d,%d:%f"。考慮一個前面的空格來容忍固定字符之前的可選空格:"%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"應永遠不會因為他們缺乏一個可以使用寬度,一些健壯的代碼總是使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406062.html
標籤:
下一篇:嘗試反轉字串會導致空白字串
