使用指针从另一个函数打印字符串

时间:2014-03-23 18:28:32

标签: c function point

所以我从头开始编写国际象棋程序来处理编码,我遇到了一个我无法弄清楚的问题。这是我的问题的重要部分:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int printboard(char board[8][8])
{
    int i, x, y;
    char piece;
    char *clrptr, *nmptr;

    printf("\n");

    for (x=0; x<=40; x++)
    {
        if (x%5 == 0)
        {
            for (i=0; i<8; i++)
            {
                printf("|---------|");
            }
            printf("\n");
        }
        if (x%5 == 1 || x%5 == 4)
        {
            for (i=0; i<8; i++)
            {
                printf("|         |");
            }
            printf("\n");
        }
        if (x%5 == 2)
        {
            for (i=0; i<8; i++)
            {
                piece = board[x/5][i];
                int colorstr(char piece, char* clrptr);
                printf("|   %c%c%c   |", *clrptr, *clrptr+1, *clrptr+2);
            }
            printf("\n");
        }
    }
    return 0;
}

int colorstr(char piece, char* clrptr)
{
    char black[4] = "Blk", white[4] = "Wht", empty[4] = "000";

    if (isupper(piece) != 0)
        clrptr = black;
    if (piece == '0')
        clrptr = empty;
    else
        clrptr = white;
    return 0;
}

这个想法是将棋子定义为我的棋盘数组中的字母数字字符,而colorstr函数决定哪个棋子角色制作什么颜色,然后指定clrptr指向相关字符串数组中的第一个字符(黑色,白色) ,或空)。回到main函数中,打印clrptr,clrptr + 1和clrptr + 2,这实际上会打印colorstr确定的字符串。或者至少,这是我的意图。我改为▒▒▒。 nmstr函数做同样的事情,所以解决这个问题应该解决这两个问题。

(我的编译器是cygwin-gcc。)

3 个答案:

答案 0 :(得分:1)

你的colorstr是noop。此外,为了正确的工作功能,您应该调整参数和返回类型。尝试:

char* colorstr(char piece)
{
    return piece == '0' ? "000" : (isupper(piece) ? "Wht" : "Blk");
}

当你打电话时:

for (i=0; i<8; i++)
{
    piece = board[(unsigned char)x/5][i];
    clrptr = colorstr(piece); /* clrptr is returned
      (was a local declaration before) */
    printf("|   %s   |", clrptr);
}
printf("\n");

答案 1 :(得分:0)

摘录

            piece = board[x/5][i];
            int colorstr(char piece, char* clrptr);
            printf("|   %c%c%c   |", *clrptr, *clrptr+1, *clrptr+2);

错了。在中心,你不是在调用colorstr()函数,而是在声明它!

试试这个

            piece = board[x/5][i];
            colorstr(piece, clrptr);
            printf("|   %c%c%c   |", *clrptr, *clrptr+1, *clrptr+2);

这只是一个开始,这里有很多错误。例如,您甚至不为clrptr分配内存!

答案 2 :(得分:0)

colorstar功能根本不起作用 试试这个:

void colorstr(char piece, char** clrptr) /* get a pointer to the orignal pointer */
{
    static char black[4] = "Blk", white[4] = "Wht", empty[4] = "000";

    if (isupper(piece) != 0)
    {
        *clrptr = black;
    }
    if (piece == '0')
    {
        *clrptr = empty;
    }
    else
    {
        *clrptr = white;
    }
}

当你打电话时:

        for (i=0; i<8; i++)
        {
            piece = board[x/5][i];
            colorstr(piece, &clrptr); /* pass the address of clrptr, not just a copy of its value */
            printf("|   %s   |", clrptr);
        }
        printf("\n");