C语言中如何规范输入类型

#猜数字环节中‘guess’变量,例如:输入2.5会导致死循环
能否通过代码实现:输入非想要的整数内容时,提示输入信息错误

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
void menu()
{
    printf("*********************\n");
    printf("*****1.进入游戏******\n");
    printf("*****0.退出游戏******\n");
    printf("*********************\n");
}
void game()
{
    int ret = rand()%100 + 1;//生成一个1-100的随机数
    int guess = 0;
    while (1)
    {
        printf("请猜数字\n");
        scanf("%d", &guess);
        if (guess < 0)
        {
            printf("错误的范围,请猜0-100区间的整数\n");
        }
        else if (guess > 100)
        {
            printf("错误的范围,请猜0-100区间的整数\n");
        }
        else
        {
            if (guess < ret)
            {
                printf("猜小了\n");
            }
            else if (guess > ret)
            {
                printf("猜大了\n");
            }
            else
            {
                printf("恭喜你猜中了\n");
                break;
            }
        }
    }
    return 0;
}
int main()
{
    int input = 0;
    srand((unsigned int)time (NULL));
    do
    {
        menu();//打印菜单
        printf("请选择\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏");
            break;
        default:
            printf("错误指令");
            break;
        }
    } while (input);

    return 0;
}

该回答内容部分引用GPT,GPT_Pro更好的解决问题
要实现通过代码提示输入错误的功能,可以使用C语言中的scanf()函数。scanf()函数有一个参数,其中可以指明想要获取的输入类型,如整型int、浮点型float等,程序会根据指定的输入类型进行验证,如果输入的内容不符合指定的类型,则会提示输入错误,从而避免出现死循环。

下面是代码实例:

#include <stdio.h>
int main(){
    int guess;  //定义一个整型变量guess 
    printf("输入一个整数:");
    scanf("%d",&guess);  //从键盘获取整型数据,并储存在guess变量中
    if(guess == 0){  //判断输入的数据是否为0
        printf("输入正确\n");
    }else{  //输入不为0时,提示输入错误
        printf("输入有误!请重新输入\n");
    }
    return 0;
}

如果回答有帮助,望采纳。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以在输入guess的代码块中添加对输入是否为整数的判断。如果输入不是整数,则提示用户输入信息错误,并清空缓存区。可以使用scanf函数的返回值来判断输入是否为整数。修改后的代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void menu()
{
    printf("*********************\n");
    printf("*****1.进入游戏******\n");
    printf("*****0.退出游戏******\n");
    printf("*********************\n");
}

void game()
{
    int ret = rand()%100 + 1;//生成一个1-100的随机数
    int guess = 0;
    while (1)
    {
        printf("请猜数字\n");
        int res = scanf("%d", &guess);
        if (res != 1)
        {
            printf("输入信息错误,请输入一个整数\n");
            fflush(stdin);  // 清空缓存区
        }
        else if (guess < 0 || guess > 100)
        {
            printf("错误的范围,请猜0-100区间的整数\n");
        }
        else
        {
            if (guess < ret)
            {
                printf("猜小了\n");
            }
            else if (guess > ret)
            {
                printf("猜大了\n");
            }
            else
            {
                printf("恭喜你猜中了\n");
                break;
            }
        }
    }
}

int main()
{
    int input = 0;
    srand((unsigned int)time (NULL));
    do
    {
        menu();//打印菜单
        printf("请选择\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏");
            break;
        default:
            printf("错误指令");
            break;
        }
    } while (input);
    return 0;
}

在输入guess时,我们使用scanf函数读取一个整数,并将其保存到guess变量中。如果scanf函数返回的值不为1,则说明输入不是整数,因此我们提示用户输入信息错误,并使用fflush函数清空缓存区。注意,fflush函数在标准输入流上的行为是未定义的,但是在某些系统上可以清空缓存区。因此,如果要跨平台使用该程序,可能需要使用其他方法来清空缓存区。