对大量数据使用scanf

时间:2014-02-20 05:58:01

标签: scanf

我必须以这种格式读取数据:

3000 100 14.283,65.966,49.807,43.363,71.496,61.712,7.0562,24.365,50.623,38.299,32.566,89.61,20.412,

我可以轻松读取前3个数字,但是当我尝试在循环中使用scanf时,它只是一遍又一遍地读取14.283。

我输入数据的方式(这是不可协商的)是通过使用bash I / O将包含数据的文件中的“cat”的结果传送到我的程序中

如果我猜测...我会说它不喜欢[^,]而忽略了那一点以后的所有数据?

#include <stdio.h>

int main( void ){

    int total, rows, columns;
    float number;
    scanf("%d", &rows);
    scanf("%d", &columns);
    printf("%d\n%d\n", rows, columns);
    for(int i = 0; i < 5; i++){
        scanf("%f[^,]", &number);
        printf("%f\n", number);


    }

}

2 个答案:

答案 0 :(得分:0)

显然这不是正则表达式,但它有效

for(int i = 0; i < 5; i++){
    scanf("%f %c", &number2, &comma);
    printf("%f\n", number2);


}

number2取浮点值,逗号吃逗号

答案 1 :(得分:0)

你可以这样做

char character[2];
for(int i = 0; i < 5; i++){
    scanf("%f%[^,]", &number2,character);
    printf("%f\n", number2);
}

或简单地使用抑制算子

for(int i = 0; i < 5; i++){
    scanf("%f%*[^,]", &number2);
    printf("%f\n", number2);
}