百度贴吧,C语言吧友问题解答——简单的程序设计

题目:

功能模块说明:

  1. 登录:密码设置为“abc”,共三次输入密码机会, 超过三次为登录不成功。
  2. 选择项目:列出三个选项,1、猜数字,2、猜大小,3、退出。选择项目后,执行相应内容。
  3. 猜数字:随机产生一个0到99之间的整数,5次猜数字机会,没猜中会提示太大还是太小。
  4. 猜大小:随机产生一个1到6之间的整数,1-3为小,4-6为大,用户猜大小。

注:猜数字和猜大小模块后,回到选择项目模块。

在这里插入图片描述

思路:

  • 利用 while(1) 死循环,以及调用定义的每个模块的函数来实现整个程序。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h>   //用于猜数游戏中,rand生成随机数

#define N 30
#define PASS_WORD "abc" //密码
#define TRIES 3     //登录密码的尝试次数
/*猜数*/
#define MAX_NUM 100 //猜数的范围
#define GUESS_TIME 5    //猜数的次数

int Menu(); //菜单

int Login();   //登录

void Guess_Num();   //猜数字

void Guess_Size();  //猜大小

int Menu()
{
    system("cls");
    int chose = 0;
    printf("\n************************恭喜进入本程序************************\n");
    printf("您有以下选择:\n");
    printf("1、猜数字游戏\n");
    printf("2、猜大小游戏\n");
    printf("0、退出\n");
    printf("请选择:");
    while(1)
    {
        scanf("%d", &chose);
        if(chose >= 0 && chose <= 3)
            break;
        else
        {
            printf("阁下,好像没这个选项吧。\n");
            printf("请按要求重新输入:\n");
        }
    }
    return chose;
}

int Login()
{
    system("cls");
    char password[N] = "\0";
    int count = 0;
    int i = 0;
    printf("请输入登录密码:");
    while(1)
    {
        scanf("%s", password);
        if(strcmp(password, PASS_WORD) == 0)
        {
            for(i = 0; i < 5; i++)
            {
                printf(".");
                Sleep(500);
            }
            printf("\n\n密码正确!!!\n");
            Sleep(1000);
            system("pause");
            return 1;
        }
        else if(count == TRIES - 1)
        {
            return 0;
        }
        else
        {
            printf("\n密码错误!!!您还有%d次机会\n", TRIES - count - 1);
            printf("请重新输入:");
            count++;
        }
    }
    return 0;
}

void Guess_Num()
{
    system("cls");
    srand((unsigned) time(0));    //撒种子
    int num = rand() % MAX_NUM;    //随机生成的数
    int guess = 0;  //用户猜的数
    int count = 0;  //猜数的次数
    printf("\n************************欢迎来到猜数游戏************************\n");
    printf("游戏规则:\n");
    printf("您输入一个%d以内的数字,我说出猜大了还是猜小了,您有%d次猜数机会。\n", MAX_NUM, GUESS_TIME);
    printf("请输入一个数字:");
    while(1)
    {
        scanf("%d", &guess);
        if(0 <= guess && guess < MAX_NUM)
        {
            while(1)
            {
                if(count < GUESS_TIME)
                {
                    if(num < guess)
                    {
                        printf("猜大了,小一点:");
                        scanf("%d", &guess);
                        count++;
                    }
                    else if(num > guess)
                    {
                        printf("猜小了,大一点:");
                        scanf("%d", &guess);
                        count++;
                    }
                    else if(num == guess)
                    {
                        printf("猜对了!!!\n这次的数是%d", num);
                        return;
                    }
                    else
                        break;
                }
                else
                    {
                        printf("很遗憾,%d次机会已经用完了,本次游戏结束。\n", GUESS_TIME);
                        printf("很接近了,这次的数是%d\n", num);
                        return;
                    }
            }
        }
        else
            printf("输入有误,请按要求重新输入:");
    }
    system("pause");
}

void Guess_Size()
{
    system("cls");
    srand((unsigned) time(0));    //撒种子
    int num = rand() % 6 + 1;
    int guess = 0;
    printf("\n************************欢迎来到猜大小游戏************************\n");
    printf("游戏规则:\n");
    printf("随机生成一个1到6的数,1,2,3为小,4,5,6为大,您猜大小,大为“1”, 小为“0”\n");
    printf("游戏已经开始,请猜大小:");
    while(1)
    {
        scanf("%d", &guess);
        if(guess == 0 || guess == 1)
            break;
        else
            printf("猜测有误,猜大按“1”, 猜小按“0”,请重新猜:");
    }
    if(num >= 1 && num <= 3 && guess == 0)
    {
        printf("猜对了!这次的数是%d\n", num);
    }
    else if(num >= 4 && num <= 6 && guess == 1)
    {
        printf("猜对了!这次的数是%d\n", num);
    }
    else
        printf("\n可惜可惜,猜错了。不要气馁,再来挑战!\n");
    return;
}

int main()
{
    int chose = 0;  //用户的选择
    int running = 1;    //控制while
    int login_status = Login();   //接收登录状态
    if(login_status == 1)
    {
        while(running)
        {
            chose = Menu();
            switch(chose)
            {
                case 0:
                    {
                        system("pause");
                        return 0;
                    }
                case 1:
                    {
                        Guess_Num();
                        system("pause");
                        break;
                    }
                case 2:
                    {
                        Guess_Size();
                        system("pause");
                        break;
                    }
            }
            printf("返回主页请按“1”, 退出程序请按“0”:");
            scanf("%d", &running);
        }
    }
    else
        printf("\n您已经输错%d次密码,请下次再来登录。\n", TRIES);
        
    return 0;
}

运行结果:

  1. 登录
    在这里插入图片描述
  2. 菜单
    在这里插入图片描述
  3. 猜数字
    在这里插入图片描述
  4. 猜大小
    在这里插入图片描述
    经测试,结果符合题目要求。

**

  • 代码练习,仅为一种思路,若有错误请指出

**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值