我写的代码如下:
#include<stdio.h>
int sum=0;
int *pm,*pn; //定义全局变量
void revolve(int m,int n,char a[m][n])
{
int i=0,j=0;
if(m!=1)
while(((*pm)*(*pn))!=sum)
{
if(sum==0) //把最外一圈输出
{
for(;a[i][j]!='\0';i++)
printf("%c",a[i][j]),a[i][j]='\0',sum++;
for(i--,j++;a[i][j]!='\0';j++)
printf("%c",a[i][j]),a[i][j]='\0',sum++;
for(j--,i--;a[i][j]!='\0';i--)
printf("%c",a[i][j]),a[i][j]='\0',sum++;
for(i++,j--;a[i][j]!='\0';j--)
printf("%c",a[i][j]),a[i][j]='\0',sum++;
}
else
{
char b[m-2][n-2]; //将剩余字符转存入另一个数组
for(i=0;i<m-2;i++)
for(j=0;j<n-2;j++)
b[i][j]=a[i+1][j+1];
revolve(m-2,n-2,b); //递归调用
}
}
else //当只有一行时,直接输出
{
for(;i<n;i++)
printf("%c",a[0][i]);
printf("\n");
}
}
int main()
{
int m,n;
scanf("%d%d",&m,&n); //输入规格
pm=&m,pn=&n;
char a[m][n];
for(int i=0;i<m;i++) //输入
for(int j=0;j<n;j++)
getchar(),a[i][j]=getchar();
revolve(m,n,a); //螺旋输出
return 0;
}
调试运行时发现revolve函数调用后并不会递归调用然后就结束了。
请问,这个问题出在哪了?
非常感谢!
不知道你这个问题是否已经解决, 如果还没有解决的话: