{
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;
}

为什么会变成这个样子?
然后将%1f中1删去,运行结果

之后将双精度response改为float型,运行结果与书上相同。

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