C 将字符作为数字进行比较

C 将字符作为数字进行比较,c,char,C,Char,我最近开始编程,目前正在开发一款游戏 在这个游戏中,我需要将当前输入与来自数组的最后一个输入进行比较。 在十进制之前的数字系统中,这真的很容易 #include <stdio.h> #define Max_size 256 #define N 36 void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2); int main (void) { int temp,status,Nu

我最近开始编程,目前正在开发一款游戏

在这个游戏中,我需要将当前输入与来自数组的最后一个输入进行比较。 在十进制之前的数字系统中,这真的很容易

#include <stdio.h>
#define Max_size 256
#define N 36

void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2);

int main (void)
{

    int temp,status,NumberSystem,MaxRepetitions  ;

    char Player1 [Max_size] ;
    char Player2 [Max_size] ;
    printf("Please enter the first player's name\n");
    scanf("%s",&Player1);

    printf("Please enter the second player's name\n");
    scanf("%s",&Player2);


    printf("Please enter a Number System between %d and %d\n",4,35);
    status =  scanf("%d",&NumberSystem );

    while( NumberSystem  > 35 ||  NumberSystem < 4 || status != 1  )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("Please enter a valid Number System \n");
        status = scanf("%d", &NumberSystem );
    }




    printf("Please enter a Number of maximum repetitions\n");
    status = scanf("%d",&MaxRepetitions);

    while(  (MaxRepetitions<= 0) ||  (status != 1)   )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("Please enter a valid number of maximum repetitions\n");
        status = scanf("%d",&MaxRepetitions);
    }


    Game(NumberSystem,MaxRepetitions,Player1,Player2);


}


void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2)
{




    int status,counter,k,i,temp;
    char fnumber,number;

    counter = k = 1;

    int *array1 = malloc(MaxRepetitions*NumberSystem*sizeof(int));
    int *array2 = malloc(NumberSystem*sizeof(int));
    char CharArray[N] = {'0','1','2','3', '4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

    for(i=0; i<NumberSystem*sizeof(int),i++;)
        array2[i] = 0;





    printf("Let's start the game! %s begins.\n",Player1);
    status = scanf("%d",&fnumber);

    while(status != 1  || fnumber <= 0 || fnumber>NumberSystem-1)
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("First number must be a positive decimal number between %d and %d\n",1,NumberSystem-1);
        status = scanf("%d", &fnumber);
    }

    array1[0] = fnumber;
    array2[fnumber]++;


    while( array2[number] < MaxRepetitions)
    {
        status = scanf("%d",&number);

        while(status != 1  || number < 0 || number>NumberSystem-1 || ( (array1[k-1]!= NumberSystem-1) && (array1[k-1] >= number) )              )
        {
            while((temp=getchar()) != EOF && temp != '\n');
            printf("You must enter a number greater than %d and smaller or equal to %d\n",array1[k-1],NumberSystem-1);
            status = scanf("%d", &number);
        }

        array2[number]++;
        array1[k] = number;
        k++;
        counter++;

    }



    if(counter%2 == 0)
    {
        printf("%s entered %d for the %dth time and exceeded the possible limit. %s won!",Player2,array1[k-1],MaxRepetitions,Player1);
    }

    else
    {
        printf("%s entered %d for the %dth time and exceeded the possible limit. %s won!",Player1,array1[k-1],MaxRepetitions,Player2);
    }




    free (array1);
    free (array2);

}
下面是我编写的代码,它处理从系统到十进制的数字

#include <stdio.h>
#define Max_size 256
#define N 36

void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2);

int main (void)
{

    int temp,status,NumberSystem,MaxRepetitions  ;

    char Player1 [Max_size] ;
    char Player2 [Max_size] ;
    printf("Please enter the first player's name\n");
    scanf("%s",&Player1);

    printf("Please enter the second player's name\n");
    scanf("%s",&Player2);


    printf("Please enter a Number System between %d and %d\n",4,35);
    status =  scanf("%d",&NumberSystem );

    while( NumberSystem  > 35 ||  NumberSystem < 4 || status != 1  )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("Please enter a valid Number System \n");
        status = scanf("%d", &NumberSystem );
    }




    printf("Please enter a Number of maximum repetitions\n");
    status = scanf("%d",&MaxRepetitions);

    while(  (MaxRepetitions<= 0) ||  (status != 1)   )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("Please enter a valid number of maximum repetitions\n");
        status = scanf("%d",&MaxRepetitions);
    }


    Game(NumberSystem,MaxRepetitions,Player1,Player2);


}


void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2)
{




    int status,counter,k,i,temp;
    char fnumber,number;

    counter = k = 1;

    int *array1 = malloc(MaxRepetitions*NumberSystem*sizeof(int));
    int *array2 = malloc(NumberSystem*sizeof(int));
    char CharArray[N] = {'0','1','2','3', '4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

    for(i=0; i<NumberSystem*sizeof(int),i++;)
        array2[i] = 0;





    printf("Let's start the game! %s begins.\n",Player1);
    status = scanf("%d",&fnumber);

    while(status != 1  || fnumber <= 0 || fnumber>NumberSystem-1)
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("First number must be a positive decimal number between %d and %d\n",1,NumberSystem-1);
        status = scanf("%d", &fnumber);
    }

    array1[0] = fnumber;
    array2[fnumber]++;


    while( array2[number] < MaxRepetitions)
    {
        status = scanf("%d",&number);

        while(status != 1  || number < 0 || number>NumberSystem-1 || ( (array1[k-1]!= NumberSystem-1) && (array1[k-1] >= number) )              )
        {
            while((temp=getchar()) != EOF && temp != '\n');
            printf("You must enter a number greater than %d and smaller or equal to %d\n",array1[k-1],NumberSystem-1);
            status = scanf("%d", &number);
        }

        array2[number]++;
        array1[k] = number;
        k++;
        counter++;

    }



    if(counter%2 == 0)
    {
        printf("%s entered %d for the %dth time and exceeded the possible limit. %s won!",Player2,array1[k-1],MaxRepetitions,Player1);
    }

    else
    {
        printf("%s entered %d for the %dth time and exceeded the possible limit. %s won!",Player1,array1[k-1],MaxRepetitions,Player2);
    }




    free (array1);
    free (array2);

}
#包括
#定义最大尺寸256
#定义n36
无效游戏(整数系统,整数最大重复,字符*Player1,字符*Player2);
内部主(空)
{
int temp、状态、数字系统、最大重复次数;
字符播放器1[最大大小];
字符播放器2[最大大小];
printf(“请输入第一个玩家的名字\n”);
scanf(“%s”和Player1);
printf(“请输入第二名玩家的姓名\n”);
scanf(“%s”和Player2);
printf(“请输入一个介于%d和%d之间的数字系统”,4,35);
状态=扫描频率(“%d”和编号系统);
而(NumberSystem>35 | | NumberSystem<4 | | status!=1)
{
而((temp=getchar())!=EOF&&temp!='\n');
printf(“请输入有效的数字系统\n”);
状态=扫描频率(“%d”和编号系统);
}
printf(“请输入最大重复次数\n”);
状态=扫描频率(“%d”和最大重复次数);
而((最大重复次数=个数)))
{
而((temp=getchar())!=EOF&&temp!='\n');
printf(“您必须输入一个大于%d且小于或等于%d\n的数字”,数组1[k-1],数字System-1);
状态=扫描频率(“%d”和编号);
}
数组2[数字]+;
阵列1[k]=编号;
k++;
计数器++;
}
如果(计数器%2==0)
{
printf(“%s在第%d次输入了%d,超出了可能的限制。%s赢得!”,Player2,array1[k-1],最大重复次数,Player1);
}
其他的
{
printf(“%s在第%d次输入了%d,超出了可能的限制。%s赢得!”,Player1,array1[k-1],最大重复次数,Player2);
}
免费(array1);
免费(array2);
}
问题是,我希望它能够发挥更大的数字系统,例如十六进制。我一直在比较当前输入的字母和以前输入的字母的值

我在寻求任何建议或建议。 另外,如果我在第一段代码中做了一些非常愚蠢的事情(可能是我做的),我会很高兴听到你们的建设性批评

谢谢大家!

下面是“第二版”的代码,我曾尝试使用更大的数字系统来实现这一点。我不知道我做错了什么

#include <stdio.h>
#define Max_size 256
#define N 36

void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2);

int main (void)
{

    int temp,status,NumberSystem,MaxRepetitions  ;

    char Player1 [Max_size] ;
    char Player2 [Max_size] ;
    printf("Please enter the first player's name\n");
    scanf("%s",&Player1);

    printf("Please enter the second player's name\n");
    scanf("%s",&Player2);


    printf("Please enter a Number System between %d and %d\n",4,35);
    status =  scanf("%d",&NumberSystem );

    while( NumberSystem  > 35 ||  NumberSystem < 4 || status != 1  )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("Please enter a valid Number System \n");
        status = scanf("%d", &NumberSystem );
    }




    printf("Please enter a Number of maximum repetitions\n");
    status = scanf("%d",&MaxRepetitions);

    while(  (MaxRepetitions<= 0) ||  (status != 1)   )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        printf("Please enter a valid number of maximum repetitions\n");
        status = scanf("%d",&MaxRepetitions);
    }


    Game(NumberSystem,MaxRepetitions,Player1,Player2);


}


void Game(int NumberSystem,int MaxRepetitions,char *Player1,char *Player2)
{

    int status,counter,k,i,temp;
    char fnumber,number;

    counter = k = 1;

    char *array1 = malloc(MaxRepetitions*NumberSystem*sizeof(char));
    int *array2 = malloc(NumberSystem*sizeof(int));
    char CharArray[N] = {'0','1','2','3', '4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

    for(i=0; i<NumberSystem*sizeof(int),i++;)
        array2[i] = 0;

    printf("Let's start the game! %s begins.\n",Player1);


    //scanf("%c",&fnumber); // This part is ignored completely i don't know why

    status = 0;


   // for(i=0; i<NumberSystem-1; i++)
    //{if(fnumber == CharArray[i]) status = 1;}

    printf("Current status : %d\n",status);

    while(status == 0)
    {
        while((temp=getchar()) != EOF && temp != '\n');
        scanf("%c", &fnumber);



        for(i=0; i<NumberSystem-1; i++)
            if(fnumber == CharArray[i]) status = 1;break;

printf("First number must be a positive decimal number between %d and %d (in %d number system)\n",1,NumberSystem-1,NumberSystem);
    }

    array1[0] = fnumber;
    array2[fnumber]++;

    printf("Przed druga petla array1[0] : %c,array2[fnumber] : %d\n",array1[0],array2[fnumber]);


    while( array2[k] < MaxRepetitions)
    {
        scanf("%c",&number);
        status = 0;

        for(i=0; i<NumberSystem-1; i++)
            if(number == CharArray[i]) status = 1;

        while(status == 0   || ( (array1[k-1] != CharArray[NumberSystem-1]) && (array1[k-1] >= number) )              )
        {
            while((temp=getchar()) != EOF && temp != '\n');

            printf("You must enter a number greater than %c and smaller or equal to %d\n",array1[k-1],NumberSystem-1);
            scanf("%c", &number);

            status = 0;
            for(i=0; i<NumberSystem-1; i++)
                if(number == CharArray[i]) status = 1;break;

        }

        array2[number]++;
        array1[k] = number;
        k++;
        counter++;

    }

    if(counter%2 == 0)
    {
        printf("%s entered %d for the %dth time and exceeded the possible limit. %s won!",Player2,array1[k-1],MaxRepetitions,Player1);
    }

    else
    {
        printf("%s entered %d for the %dth time and exceeded the possible limit. %s won!",Player1,array1[k-1],MaxRepetitions,Player2);
    }

    free (array1);
    free (array2);

}
#包括
#定义最大尺寸256
#定义n36
无效游戏(整数系统,整数最大重复,字符*Player1,字符*Player2);
内部主(空)
{
int temp、状态、数字系统、最大重复次数;
字符播放器1[最大大小];
字符播放器2[最大大小];
printf(“请输入第一个玩家的名字\n”);
scanf(“%s”和Player1);
printf(“请输入第二名玩家的姓名\n”);
scanf(“%s”和Player2);
printf(“请输入一个介于%d和%d之间的数字系统”,4,35);
状态=扫描频率(“%d”和编号系统);
而(NumberSystem>35 | | NumberSystem<4 | | status!=1)
{
而((temp=getchar())!=EOF&&temp!='\n');
printf(“请输入有效的数字系统\n”);
状态=扫描频率(“%d”和编号系统);
}
printf(“请输入最大重复次数\n”);
状态=扫描频率(“%d”和最大重复次数);

而((MaxRepetitions据我所知,您离解决方案不远。但我建议使用
%1s
而不是
%c
来读取您的字符。
%c
接受任何字符,包括空格和换行符。相反,
%1s
将跳过所有最终的空格和换行符

简单地说,由于
%1s
给出了一个以null结尾的字符串,因此您必须使用一个数组(
char-anumber[2]
),将一个字符读入数组(第二个字符将是
\0`),并将其影响到您使用的字符。例如,您只需替换

scanf("%c", &fnumber);


太多的代码,将问题缩小到为什么要求
scanf()
的返回值为
1
?请解释您期望看到的内容和看到的内容…您是对的Yu。EOF:我需要这个,因为当我想要一个数字作为输入时(例如,当用户选择NumberSystem时)我想收到一个数字,而不是一个字母。Arkadiy-我想编写我的程序,以便它将CharArray[]中的字符视为数字,例如a-10B-11。因此,游戏将使用大于十进制的数字系统。