一个C语言的简单的小问题

#include
#include
#include
#define MAX_NUMBER 100
#define MIN_NUMBER 0
#define MAX_TIMES 10
int MakeNumber(void);
void GuessNumber (const int number);
int IsValidNumber (const int number);
int IsRight (const int number,const int guess);

int main()
{
int number;
char reply;
srand(time(NULL));
do {
number = MakeNumber();
GuessNumber(number);
printf("Do you want to continue(Y/N or y/n)\n");
scanf(" %c",&reply);
}while (reply =='Y'||reply =='y');
return 0;
}
int MakeNumber (void)
{
int randnumber;
randnumber = (rand()%(MAX_NUMBER-MIN_NUMBER+1))+MIN_NUMBER;
return randnumber;
}

int IsValidNumber (const int number)
{
if(number>=MIN_NUMBER||number<=MAX_NUMBER)
return 1;
else
return 0;
}
void GuessNumber(const int number)
{
int guess;
int count = 0;
int right = 0;
int ret;
do{
printf("Try %d\n",++count);
ret = scanf("%d",&guess);
while(ret!=1||!IsValidNumber(guess))
{
printf("PLEASE INPUT RIGHT FORMAT!\n");
while (getchar()!='\n');
printf("Try %d",++count);
ret =scanf("%d",&guess);
}

right = IsRight (number,guess);
}while (!right&&count <= MAX_NUMBER);
if (right!=1)
printf("Congratulations!You are fucking niubi!");
else
printf("Mission failed after %d attemps.",MAX_TIMES);

}
int IsRight(const int guess,const int number)
{
if (guess>number)
{
printf("WRONG!Too big!");
return 1;
}
else if(guess
{
printf("WRONG!Too small!");
return 1;
}
else return 0;
}
一: 我在编译运行的时候发现这个程序不能将猜数字的次数每次往上加一,我感觉我编的对啊,++count不就可以做到这个功能吗
二: 我输入的数字大于MAX_NUMBER程序没有警告啊,为什么呢
三 :我把头文件删除为什么程序显示错误呢,难道头文件不起作用吗

1、关于count不起效的原因应该是你在判断是否超出指定次数时是用count <= MAX_NUMBER来判断的,而不是用count <= MAX_TIMES来判断的,根据你的代码,MAX_TIMES应该才是定义指定猜数游戏进行几次的常量,代码测试我是用MAX_TIMES=3测试的。
2、输入的数字为什么大于大于MAX_NUMBER没有警告,应该是因为number>=MIN_NUMBER||number<=MAX_NUMBER这个判断输入数据是否符合要求的判断不对,应该改为:number<=MIN_NUMBER||number>=MAX_NUMBER, 同时在调用这个函数时的判断也需要该一下。
3、至于把头文件<assert.h>删除为什么程序显示错误,应该是因为rand()函数需要一个一个头文件,你加上<stdlib.h>应该就可以了,但为什么加上<assert.h>也可以,我不知道是为什么。
代码修改如下:


#include <stdio.h>
#include <time.h>
#include <assert.h>
#define MAX_NUMBER 100
#define MIN_NUMBER 0
#define MAX_TIMES 10

int MakeNumber(void);
void GuessNumber (const int number);
int IsValidNumber (const int number);
int IsRight (const int number,const int guess);

int main()
{

    int number;
    char reply;
    srand(time(NULL));
    do {
        number = MakeNumber();
        GuessNumber(number);
        printf("Do you want to continue(Y/N or y/n)\n");
        scanf(" %c",&reply);
    }while (reply =='Y'||reply =='y');
    return 0;

    

}
int MakeNumber (void)
{
    int randnumber;
    randnumber = (rand()%(MAX_NUMBER-MIN_NUMBER+1))+MIN_NUMBER;
    return randnumber;
}

int IsValidNumber (const int number)
{
    if(number<=MIN_NUMBER||number>=MAX_NUMBER)
        return 1;
    else
        return 0;
}
void GuessNumber(const int number)
{

    int guess;
    int count = 0;
    int right = 0;
    int ret;
    

        
        
        
    do{
        printf("Try %d\n",++count);
        ret = scanf("%d",&guess);
        while(ret!=1||IsValidNumber(guess)==1)
        {
            printf("PLEASE INPUT RIGHT FORMAT!\n");
            while (getchar()!='\n');
            printf("Try %d\n",count);
            ret =scanf("%d",&guess);
        }
        right = IsRight (guess,number);
    //    printf("count=%d\n",count);
        
    }while (right==1&&count < MAX_TIMES);

    if (right!=1)
    printf("Congratulations!You are fucking niubi!\n");
    else
    printf("Mission failed after %d attemps.\n",MAX_TIMES);
    
    
        

    

}
int IsRight(const int guess,const int number)
{
    if (guess>number)
    {
        printf("WRONG!Too big!\n");
        return 1;
    }
    else if(guess<number)
    {
        printf("WRONG!Too small!\n");
        return 1;
    }
    else return 0;
}

img


看一下官方文档把。你这一大串也不写个注释,

1.第一个问题,次数不加一的原因是你每次尝试猜数都是调用的GuessNumber();函数,其中count是在函数中定义的局部变量,每次调用都会被赋值成0,所以每一次都是1,可以把int count = 0;改为static int count = 0;这样下次调用的时候就不会重新赋值成0了。
2.第二个问题输入数字大于MAX_NUMBER程序没有警告是因为你在对输入数据进行校验的时候是用的if(number>=MIN_NUMBER||number<=MAX_NUMBER),判断是否大于等于最小或小于等于最大,此处应该改为if(number>=MIN_NUMBER**&&**number<=MAX_NUMBER)
3.第三个问题我这边没有出现,你可以贴一下错误信息出来看看

一、IsRight的返回值问题,因为你在猜对时返回的是0,猜错返回1,所以第一次猜错就退出循环了。 while (!right && count <= MAX_NUMBER);
修改:去掉上面的循环判断的!,或者修改IsRight的返回方式,建议选后者
二、while (ret != 1 || !IsValidNumber(guess)),只要输入不是1,就不会执行IsValidNumber,所以把||改为&&就可以了
三、没出现问题,请详细说明错误信息