通过scanf读取一行,但它读取两次

时间:2015-10-20 12:46:46

标签: c loops scanf

这是代码

int
read_data(void){
    char type;
    double x_val,y_val,noise_val;   
    while (scanf("%c %lf %lf %lf",&type,&x_val,&y_val,&noise_val)==4){
        printf("%c %lf %lf %lf",type,x_val,y_val,noise_val);
    }
    return 0;
}

输入

N 501.0 7501.0 80.0
N 1001.0 5001.0 90.0
N 3501.0 7501.0 130.0
N 5001.0 2001.0 85.0

当我在编译为test < testing.txt后输入时,它只打印第一行。

但是,如果我删除while循环并继续添加更多scanfs并打印,则这是输出。

N 501.000000 7501.000000 80.000000

 501.000000 7501.000000 80.000000
N 1001.000000 5001.000000 90.000000

 1001.000000 5001.000000 90.000000
N 3501.000000 7501.000000 130.000000

 3501.000000 7501.000000 130.000000
N 5001.000000 2001.000000 85.000000

 5001.000000 2001.000000 85.000000
出了什么问题?

1 个答案:

答案 0 :(得分:3)

问题是scanf调用在第一行之后没有读取换行符,它仍然在输入缓冲区中,所以下次调用{{1 scanf格式将读取该换行符,然后尝试将字符"%c"读取为浮点数,这将失败并且循环将退出。

一个简单的解决方案是使用N来读取这些行,然后使用fgets来解析您已读过的行。