作为强制性序言,我是C的新手,很可能只是错过了一些非常明显的内容。感谢您为解决我这个愚蠢的问题付出的所有时间和精力。
我有一个递归函数,其目的是打印出由较小的x个字符组成的大“ x”,其中width是x的每边的长度。例如,宽度为“ 3”将具有以下输出:
Shape:
X X
X
X X
Returning.
“正在返回”。在返回主菜单之前打印。
以下函数仅对1和3的宽度执行此操作,但对于5、7、9等则无法做到。
void Recurse(int left, int right, int flag, int num){
int i;
if(((left && right) == num/2) && (flag == 0)){
for(i=0;i<num;i++){
if (i == (num/2) ){
printf("X");
}
else
printf(" ");
}
printf("\n");
flag = 1;
Recurse(left-1, right+1, flag, num);
}
else if(flag == 0){
for(i=0;i<num;i++){
if((i == left) || (i == right)){
printf("X");
}
else
printf(" ");
}
printf("\n");
Recurse(left+1, right-1, flag, num);
}
else if(flag == 1){
for(i=0;i<num;i++){
if((i == left) || (i == right)){
printf("X");
}
else
printf(" ");
}
printf("\n");
if (((left == 0) && (right == num-1)) && (flag == 1))
printf("\nReturning.\n");
return;
Recurse(left-1, right+1, flag, num);
}
}
我的主函数中仅有的一件事是使用一些奇数int初始化width并调用该函数。我想实际获取代码...在稍微清理逻辑之前正确打印。感谢您提供的任何帮助。
答案 0 :(得分:1)
在
if(((left && right) == num/2) && (flag == 0)){
left && right
是一个布尔值,可能您想要
if ((left == num/2) && (right == num/2) && (flag == 0)){