所以我从头开始编写国际象棋程序来处理编码,我遇到了一个我无法弄清楚的问题。这是我的问题的重要部分:
#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。)
答案 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");