输入一开始使用
while (gets(rc))
{
if(rc[0]=='0')
break;
n=1;
xingnum=0;
memset(s,0,sizeof(s));
memset(num,0,sizeof(num));
r=rc[0]-'0';//行数
c=rc[2]-'0';
但是这样不会被AC,会出现running error可能gets读取了其他东西让rc越界了,这个BUG改了很久
贴上AC代码,这里的maxn不能小,小了会出现running error,10*10编号可能很大。
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define maxn 80
int main()
{
int r=0,c=0;//行列
int count=0,n=1;
char s[10][10];
char num[10][10];
while (scanf("%d",&r)!=EOF&&r!=0)
{
scanf("%d",&c);
getchar();//拿走回车
n=1;
memset(s,0,sizeof(s));
memset(num,0,sizeof(num));
for(int i=0;i<r;i++) gets(s[i]);//存储数据
for(int i=0;i<r;i++)//编号
for (int j=0;j<c;j++)
{
if ((s[i][j]!='*')&&((i-1<0)||(j-1)<0))
num[i][j]=n++;
else if((s[i][j]!='*')&&(i-1>=0)&&(j-1>=0))
{
if (s[i-1][j]=='*'||s[i][j-1]=='*')
num[i][j]=n++;
}
}
if (count>0) putchar('\n');
printf("puzzle #%d:\n",++count);
printf("Across\n");
for (int i=0;i<r;i++)//输出横向数据
{
for (int j=0;j<c;j++)
{
if (s[i][j]!='*')
{
printf("%3d.",num[i][j]);
for(;j<c&&s[i][j]!='*';j++)
printf("%c",s[i][j]);
putchar('\n');
}
}
}
printf("Down\n");
char sort[maxn][11];
memset(sort,'\0',sizeof(sort));
int z=0,shunxu;
for (int i=0;i<c;i++)//输出纵向数据
{
for (int j=0;j<r;j++)
{
if (s[j][i]!='*')
{
shunxu=num[j][i];
for (;j<r&&s[j][i]!='*';j++) sort[shunxu][z++]=s[j][i];
z=0;
}
}
}
for (int i=0;i<maxn;i++)
if (sort[i][0]!='\0') {printf("%3d.",i);puts(sort[i]);}
}
system("pause");
return 0;
}