continue导致的无限循环

我是想用户输入的数字不是一个的时候,返回到开始重新输入数字,但是运行时发现无限循环第一个printf,scanf好像是没运行,我不清楚为什么用continue会这样,希望能得到解答

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
    int magic,guess,counter=0;
    int ret;
    srand(time(NULL));
    magic=rand()% 100+1;
    do{
        printf("Please guess a number:");
        ret=scanf("%d",&guess);
        if (ret!=1) continue;
        counter++;
        if (guess>magic)
            printf("Wrong!Too big!\n");
        else if (guess<magic)
            printf("Wrong!Too Small!\n");
        else
            printf("Right!\n");
    }while (guess!=magic && counter<10);
    printf("counter = %d\n",counter);
    return 0;
}

当输入字母的时候,由于字母不能被%d接受,所以字母一直卡在stdin里面,造成无限输出
尝试改为

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
    int magic, guess, counter = 0;
    int ret;
    char buffer[100];
    srand(time(NULL));
    magic = rand() % 100 + 1;
    do
    {
        printf("Please guess a number:");
        ret = scanf("%d", &guess);
        if (ret != 1)
        {
            printf("ret = %d\n", ret);
            scanf("%s", buffer);
            continue;
        }
        counter++;
        if (guess > magic)
            printf("Wrong!Too big!\n");
        else if (guess < magic)
            printf("Wrong!Too Small!\n");
        else
            printf("Right!\n");
    } while (guess != magic && counter < 10);
    printf("counter = %d\n", counter);
    return 0;
}

,缺点是键入ctrl+z时需要输入任意字符以进入下一次读取
有帮助望采纳~