繁体   English   中英

C程序回文游戏

[英]C program palindrome game

我是C编程的新手,我正在尝试制作回文游戏。 我已经给出了下面的代码,但是我犯了一些错误,无法运行,请您帮我忙。 谢谢。

游戏的重点是将数字赋予一个数组,然后使用键a,d,x,w进行更改,然后尝试使其回文。

如果有任何错误,您能给我一些建议吗?

这是pal.c

#include <stdio.h>
#include "visible.h"

//--------------------------------------------------
// is_pal
//--------------------------------------------------
void print_status(int a[], int* p, int num_mov);


int is_pal(int a[])
{
    int b[6];
    int i, j;
    j = 0;
    for (i = 5; i >= 0; i--)
    {
        b[j] = a[i];
        j++;
    }
    for (i = 0; i <= 5; i++)
    {
        if (a[i] != b[i]) {
            return 0;
        }
    }
    return 1;
}


//--------------------------------------------------
// process_movement
//--------------------------------------------------

void process_movement(int a[], int* p, int num_mov, char c)
{
    char d;
    d=c;
if(d == 'd') 
{

    p = a+1;
    num_mov++;
    print_status(a,p,num_mov);
}
else if(d == 'a')
{
    p = a-1;
    num_mov++;
    print_status(a,p,num_mov);
}
else if(d == 'x')
{
    p = malloc(6*sizeof(int));
    a = p-1;
    num_mov++;
}
else if(d == 'w')
{
    p = malloc(6*sizeof(int));
    a = p+1;
    num_mov++;
}
}
//--------------------------------------------------
// print_status
//--------------------------------------------------

void print_status(int a[], int* p, int num_mov)
 {
  printf("Number =  ");
  int i;
    for( i = 0; i < 6; i++)
    {
            printf("%d ", a[i]);
    }
 printf("\n Number moves = ");
 printf("%d", num_mov);
 //printf("\n ","%s%", "Pointer is at position ");
 printf("%d", *p);
 printf("\n");
}
void user_game_palindrome(int pal_num)
{

    int a[5];
    int i,num_mov;
    num_mov = 0;
    i = 5;
while (pal_num != 0) {
    a[i] = pal_num % 10;
    pal_num = pal_num / 10;
    i--;
}
    int *p = a;
    while (is_pal(a) == 1)
    {
        char c;        
        print_status(a,p,num_mov);
        c = ask_for_command();
        process_movement(a,p,num_mov,c);
}
}

这是ex1.c

#include "pal.h"

int main() {
    int pal_num = 123342;

    user_game_palindrome(pal_num);

    return 0;
}

可见的

#include "visible.h"
#include "conio.h"
//--------------------------------------------------
// gen_num
//--------------------------------------------------

int gen_num(int lb, int ub) {
    int num = (rand() % (ub - lb)) + lb;

    return num;
}
/* Note: Do not forget to include the following instruction at the beginning of your main() method:
srand(time(NULL));
*/

//--------------------------------------------------
// my_getchar
//--------------------------------------------------

char my_get_char() {
    char my_char;
    int b = 0;
    char dummy_char;

    my_char = getchar();

    while (b == 0) {
        dummy_char = getchar();
        if (dummy_char == '\n')
            b = 1;
    }

    return my_char;
}

这是visible.c(我的老师告诉我包括它)

您从int转换为array是错误的

for (i = 0; i < 4; i++) {
    a[i] = pal_num%10;
    pal_num = pal_num % 10;
}

在这里,为什么当i 4岁时这个循环结束。 直到pal_num0为止。 并且pal_num = pal_num % 10; 应该是pal_num = pal_num / 10;

尝试类似

i = 0;
while (pal_num != 0) {
    a[i] = pal_num % 10;
    pal_num = pal_num / 10;
    i++;
}

注意:请注意,这实际上将反转int并存储在array

您的代码中有很多错误,您仍然没有解决其他人指出的许多问题。

为了消除不必要的数组b的创建,is_pal可以定义为:

int is_pal(int a[])
{
    int i;
    for (i = 0; i < 3; ++i)
    {
        if (a[5-i] != a[i])
            return 0;
    }
    return 1;
}

process_movement没有d =='w'的情况

user_game_palindrome应该进行while循环检查(is_pal(a)== 0)

您应该应用@Haris建议的更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM