C语言猜数字小游戏

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
  
void game() {  
    int guess = 0;  
    int num = rand() % 100 + 1;  
    int max = 100;  
    int min = 1;  
    int i = 0;  
    while (1) {  
        printf("猜数字:");  
        if (scanf("%d", &guess) != 1) {  
            // 清除输入缓冲区并提示用户重新输入  
            while (getchar() != '\n');  
            printf("输入无效,请重新输入一个整数。\n");  
            continue;  
        }  
        if (guess > num) {  
            max = guess - 1;  
            printf("猜大了,范围在%d~%d之间\n", min, max);  
            i++;  
        } else if (guess < num) {  
            min = guess + 1;  
            printf("猜小了,范围在%d~%d之间\n", min, max);  
            i++;  
        } else {  
            printf("猜对了,结果为%d,用了%d次\n", num, i);  
            break;  
        }  
    }  
}  
  
void menu() {  
    printf("========================\n");  
    printf("=======猜数字游戏=======\n");  
    printf("==【1.开始】【2.退出】==\n");  
    printf("========================\n");  
}  
  
int main() {  
    int input = 0;  
    srand((unsigned int)time(NULL)); // 确保在 main 函数的开始处设置随机数种子  
    do {  
        menu();  
        printf("请输入=>");  
        scanf("%d", &input);  
        switch (input) {  
            case 1:  
                printf("欢迎进入游戏\n");  
                game();  
                break;  
            case 2:  
                printf("你已经退出游戏\n");  
                break;  
            default:  
                printf("输入的参数有误\n");  
                break;  
        }  
    } while (input != 2); // 简化退出条件  
    return 0;  
}

上面的代码实现了一个简单的猜数字游戏,包含了菜单选项、随机数生成、用户输入处理以及游戏逻辑。以下是关于这段代码的注意事项和要点:

注意事项

  1. 输入验证
    • 代码使用了 scanf 来读取用户输入,并通过返回值来验证是否成功读取了一个整数。这是一个好的做法,因为这样可以防止程序在非整数输入时崩溃。
    • 但是,当用户输入了非法的字符序列(如字母、符号等)时,scanf 会留下这些字符在输入缓冲区中,可能导致后续的 scanf 调用也失败。为了解决这个问题,代码使用了一个 while 循环来消耗掉输入缓冲区中的剩余字符,直到遇到换行符或文件结束符。
  2. 随机数种子
    • srand((unsigned int)time(NULL)); 用于设置随机数生成器的种子,以确保每次程序运行时都能生成不同的随机数。这是必要的,因为如果没有设置种子,或者总是使用相同的种子,那么程序将生成相同的随机数序列。
  3. 退出条件
    • 在 main 函数中,do-while 循环用于处理菜单选项。当用户选择退出(输入2)时,input 不再等于2,因此循环终止。这是一个简洁的退出条件。
  4. 变量命名
    • 变量命名应该清晰、有意义,以便于阅读和理解代码。例如,gess 应该更正为 guess 以避免混淆。
  5. 错误处理
    • 当用户输入无效时,程序会提示用户重新输入。但是,如果用户在多次尝试后仍然输入无效,程序可能会陷入无限循环。为了增加用户体验,可以设置一个尝试次数的限制,并在达到限制后退出游戏。
  6. 内存管理
    • 在这个简单的程序中,没有动态内存分配,因此不需要担心内存泄漏或越界访问等问题。但是,在更复杂的程序中,内存管理是一个重要的考虑因素。

要点

  1. 模块化
    • 程序被划分为多个函数(gamemenumain),每个函数负责执行特定的任务。这种模块化设计使得代码更易于阅读、理解和维护。
  2. 用户交互
    • 程序通过菜单和提示与用户进行交互,使得用户能够轻松地开始和退出游戏。良好的用户交互设计可以提高用户体验。
  3. 清晰的控制流
    • 程序的控制流清晰明了,从 main 函数开始,根据用户输入执行不同的操作。这种结构使得程序易于理解和调试。
  4. 可重用性
    • game 和 menu 函数可以在其他程序或项目中重用,只要它们满足相同的接口要求。这增加了代码的可重用性和灵活性。
  5. 代码风格
    • 代码使用了清晰的缩进和注释,使得代码易于阅读和理解。良好的代码风格可以提高代码的可读性和可维护性。
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值