小白,求解。为什么double型运行结果不出,为什么%f变成%1f运行结果中打印条件会按输入字符的多少重复?

{
const double ANSWER = 3.14159;
double response;

printf("what is the value of pi?\n");
scanf_s("%1f", &response);

while (fabs(response-ANSWER) > 0.0001)
{
    printf("try again!\n");
    scanf_s("%1f",&response);
}
printf("Close enough!\n");
return 0;
}
![图片说明](https://img-ask.csdn.net/upload/202007/30/1596077336_891105.png)
 为什么会变成这个样子?
 然后将%1f中1删去,运行结果
 ![图片说明](https://img-ask.csdn.net/upload/202007/30/1596077457_592804.png)
 之后将双精度response改为float型,运行结果与书上相同。


![图片说明](https://img-ask.csdn.net/upload/202007/30/1596077862_155298.jpg)

是%lf,不是%1f

这个我在论坛回答过了呀,你这个%1f会导致每次只取一个字符 剩下的字符会在缓冲区 所以你输入了多长的字符就相当于输入了几次
也就提示几次try again! 正确的就如楼上所说的是… %lf = long float = double