这是代码
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
出了什么问题?
答案 0 :(得分:3)
问题是scanf
调用在第一行之后没有读取换行符,它仍然在输入缓冲区中,所以下次调用{{1 scanf
格式将读取该换行符,然后尝试将字符"%c"
读取为浮点数,这将失败并且循环将退出。
一个简单的解决方案是使用N
来读取这些行,然后使用fgets
来解析您已读过的行。