请问这段代码为什么会进入死循环?

初学者提问,运行下述代码,为什么当输入数字时,能正常运行。但是当输入字符时,会忽略scanf函数,从而进入死循环,而不是重新获取输入?

#include 
int main()
{
    float MB = 33, GU;
    bool PD;
while (1)
   {
    PD = scanf_s("%f", &GU);
    //printf("%d。\n",PD);
    if (PD != 1)
       printf("请输入数字。\n");
    else
        {
            if (GU < MB)
            printf("太小了。\n");        
            else if (GU > MB)
            printf("太大了。\n");
            else
           {   printf("答对了。\n");
               break;
           }
        }
    }
    return 0;
}

运行结果:

img

你在 PD = scanf_s("%f", &GU);
这个后面加上getchar()
试试看


#include <stdio.h>
int main()
{
    float MB = 33.0f, GU;
    int PD;
    while (1) {
        PD = scanf_s("%f", &GU);
      //printf("%d\n",PD);
        if (PD != 1) {
           printf("请输入数字。\n");
           rewind(stdin);
        } else {
            if (GU < MB)
                printf("太小了。\n");
            else if (GU > MB)
                printf("太大了。\n");
            else {
                printf("答对了。\n");
                break;
            }
        }
    }
    return 0;
}