[英]How do I read a string until a comma in C89?
我正在嘗試使用scanf
讀取c89
中的 CSV 文件:
FOO,2,3
BAR,5,4
...
這是我嘗試過的:
#include <stdio.h>
int main() {
char code[10];
double a,b;
while( scanf("%s,%lf,%lf", code, &a, &b)!=EOF ) {
printf("> %s\n", code);
printf("> %s,%lf,%lf\n", code, a, b);
}
return 0;
}
這是我得到的 output:
$ ./a.out
A,2,3
> A,2,3
> A,2,3,0.000000,0.000000
B,5,4
> B,5,4
> B,5,4,0.000000,0.000000
$
這是我從上面的代碼中期待的 output:
$ ./a.out
A,2,3
> A
> A,2.000000,3.000000
B,5,4
> B
> B,5.000000,4.000000
$
編輯
根據提供的評論,我嘗試過:
#include <stdio.h>
int main() {
char code[10];
double a,b;
while( scanf("%9[^,],%lf,%lf", code, &a, &b)!=EOF ) {
printf("> %s\n", code);
printf("> %s,%lf,%lf\n", code, a, b);
}
return 0;
}
我得到:
$ cat > test.txt
A,2,3
B,4,5
C,5,6
$ cat test.txt | ./a.out
> A
> A,2.000000,3.000000
>
B
>
B,4.000000,5.000000
>
C
>
C,5.000000,6.000000
>
>
,5.000000,6.000000
$
顯然,第一條記錄已正確處理,但后續記錄未正確處理。
我也有關於9
做什么以及整個%9[^,]
是否是c89
的一部分的問題。
我找到了一種解決方法,將每一行放入緩沖區並首先用空格替換逗號,然后應用%s
。
#include <stdio.h>
int main() {
char line[256];
char code[10];
double a,b;
while(scanf("%s", line) != EOF) {
/* REPLACE ALL , BY SPACES TO SIMPLIFY SCANF USAGE */
char *p = line;
while(*p!='\0') {
if(*p==',') {
*p = ' ';
}
p++;
}
sscanf(line,"%s %lf %lf", code, &a, &b);
printf("> %s\n", code);
printf("> %s,%lf,%lf\n", code, a, b);
}
return 0;
}
不確定它是否是最優雅的解決方案,但提高了 scanf 部分的可讀性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.