C程序回文游戏

时间:2015-11-29 13:02:55

标签: c

我是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;
}

visible.c

#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(我的老师告诉我要把它包括在内)

2 个答案:

答案 0 :(得分:2)

您从int转换为array的错误

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

此处,为什么在i4时此循环结束。它应该到pal_num0pal_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中。

答案 1 :(得分:-1)

你的代码中出现了很多问题,你仍然无法解决其他人指出的很多问题。

为了删除不必要的数组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 ==&#39; w&#39;

的情况

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

您应该应用@Haris

建议的更改