玩家猜数游戏(v1.0)

题目要求:

1. 系统随机生成一个0~99之间的整数;

2. 玩家输入一整数, 若和系统随机生成的数匹配, 则可随机抽取一二三等奖(由系统随即决定);

3. 若输入的数和系统随机生成的数不匹配, 系统根据玩家给出的数值进行大小提示;

4. 玩家共有十次机会猜数, 若十次过后依旧未能猜中, 系统提示机会已经用完.

[运行问题汇总] ①若将f()函数中的magic、guess变量更改为char类型, 无论你输入多少次未能匹配的数值, 计数变量i的值一直停留在1, 而未能按照设想一直增1. ②rand()函数虽然可以生成随机数, 但每次运行程序时生成的随机数都是一样的. 

[注]为了节省主存空间, 我将数值范围较小的数值全部用char类型变量存储.

问题程序:

#include<stdio.h>
#include<stdlib.h>
char f()//用户猜数流程
{
    char magic=rand()%100;//生成一个介于0~99间的整数(包括0和99)
    char guess;//记录用户输入的整数
    char i=0;//循环计数变量
    printf("当前次数:\n");
    while(i<10)
    {
        printf("%d. 请输入一个介于0~99之间的整数: ", i+1);
        //printf("i=%d\n", i);//调试语句
        scanf("%d", &guess);
        if(guess==magic)
        {
            printf("猜对了!\n");
            return 1;
        }
        else if(guess>magic)
        {
            printf("猜大了!\n");
        }
        else
        {
            printf("猜小了!\n");
        }
        i++;
    }
    //若程序执行至此, 说明10次猜数机会已经用完.
    return 0;
}
char f2()//若用户猜对, 此程序随机决定用户的获奖等级
{
     char c=rand()%100;//随机生成一个0~99的整数
     if(c<=5)
     {
        return 1;
     }//一等奖
     else if(c<=30)
     {
         return 2;
     }//二等奖
     else
     {
         return 3;
     }//三等奖
}
int main()
{
    if(f()==1)
    {
        printf("恭喜您, 奖品到手!\n");
        if(f2()==1)
        {
            printf("一等奖.\n");
        }
        else if(f2()==2)
        {
            printf("二等奖.\n");
        }
        else
        {
            printf("三等奖.\n");
        }
    }
    else
    {
        printf("很遗憾, 您的10次机会已经用完, 欢迎再次参与!\n");
    }
    //
    return 0;
}

 

正确程序:

#include<stdio.h>
#include<stdlib.h>
char f()//用户猜数流程
{
    int magic=rand()%100;//生成一个介于0~99间的整数(包括0和99)
    int guess;//记录用户输入的整数
    char i=0;//循环计数变量
    printf("当前次数:\n");
    while(i<10)
    {
        printf("%d. 请输入一个介于0~99之间的整数: ", i+1);
        //printf("i=%d\n", i);//调试语句
        scanf("%d", &guess);
        if(guess==magic)
        {
            printf("猜对了!\n");
            return 1;
        }
        else if(guess>magic)
        {
            printf("猜大了!\n");
        }
        else
        {
            printf("猜小了!\n");
        }
        i++;
    }
    //若程序执行至此, 说明10次猜数机会已经用完.
    return 0;
}
char f2()//若用户猜对, 此程序随机决定用户的获奖等级
{
     char c=rand()%100;//随机生成一个0~99的整数
     if(c<=5)
     {
        return 1;
     }//一等奖
     else if(c<=30)
     {
         return 2;
     }//二等奖
     else
     {
         return 3;
     }//三等奖
}
int main()
{
    if(f()==1)
    {
        printf("恭喜您, 奖品到手!\n");
        if(f2()==1)
        {
            printf("一等奖.\n");
        }
        else if(f2()==2)
        {
            printf("二等奖.\n");
        }
        else
        {
            printf("三等奖.\n");
        }
    }
    else
    {
        printf("很遗憾, 您的10次机会已经用完, 欢迎再次参与!\n");
    }
    //
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42048463/article/details/115168733