解决几个问题:
1.读取无用字符串边界
2.读取每格中的 有用字符。
3.读取每行最后一个|,及换行符。读取最后一行无用字符串边界。
1.读取无用字符串边界
2.读取每格中的 有用字符。
3.读取每行最后一个|,及换行符。读取最后一行无用字符串边界。
4.输出结果。
#include<stdio.h>
#define WHITE 1
#define BLACK 0
const int MAX = 10 ;
char map[MAX][MAX] ;
char dic[] = "KQRBNP";//输出棋子类型的顺序
void print(int mod ,char c ,int &first)//输出棋子类c的所有棋子位置。mod:黑方还是白方
{
char tmp = c ;
if(mod==BLACK)
c += 32 ; //把dic[]中大写字母换成小写
if(mod == BLACK)
{
for(int i = 1; i<=8 ; i++)
{
for(int j = 1; j <=8 ;j++)
{
if(map[i][j]==c) //只要小写
{
if(first) //第一个不要输出逗号,后面的都先输出逗号再输出值。
first = 0 ;
else
printf(",") ;
if(c!='P' && c!= 'p')
printf("%c",tmp) ;
printf("%c%d" , 'a'+j-1 ,9-i) ;
}
}
}
}
else
{
for(int i = 8; i>=1 ; i--)
{
for(int j = 1; j <=8 ;j++)
{
if(map[i][j]==c) //只要大写
{
if(first)
first = 0 ;
else
printf(",") ;
if(c!='P' && c!= 'p')
printf("%c",tmp) ;
printf("%c%d" , 'a'+j-1 ,9-i) ;
}
}
}
}
}
void get_bord()//读取无用的边缘字符
{
scanf("+---+---+---+---+---+---+---+---+") ;
getchar() ; //消除换行符。
}
char get_elem()//一格一格读取数据块,并把棋格中的内容取出。
{
char a ,b, c ;
scanf("|%c%c%c" ,&a ,&b ,&c) ;
return b ;
}
void result(int mod)//输出最终结果。
{
if(mod==WHITE)
printf("White: ") ;
else
printf("Black: ") ;
int first = 1 ;
for(int i = 0; i<6 ;i++) //把dic[]中的字母一个个,在表中找到,所以只要六次循环.
{
print(mod , dic[i] , first) ;
}
printf("\n") ;
}
int main()
{
for(int i = 1 ; i <= 8 ;i++)
{
get_bord() ;
for(int j = 1; j <= 8 ;j++)
{
map[i][j] = get_elem() ;
}
getchar() ; //得到最后一个|
getchar() ; //消去换行符
}
get_bord() ; //消去最后一行 +---+---+---+---+---+---+---+---+
result(WHITE) ;
result(BLACK) ;
}