【发布时间】:2017-07-10 02:48:51
【问题描述】:
所以我完成了我的代码,它提供了所需的输出,但它不会终止!我该如何解决? 我试过退货,但没有找到合适的地方保存它 所以我完成了我的代码,它提供了所需的输出,但它不会终止!我该如何解决? 我试过退货,但没有找到合适的地方存放它
#include<stdio.h>
void get_input();
void is_valid(int num);
void print_pattern(int num);
void main ()
{
get_input();
}
void get_input()
{
int a;
printf("Enter an odd number less than or equal to 9 and greater than 0 > ");
scanf("%d",&a);
is_valid(a);
}
void is_valid(int num)
{
if(num > 9)
printf("You have entered a number greater than 9. Please try again.\n\n");
else if (num < 1)
printf("You have entered a number less than 1. Please try again.\n\n");
else if (num % 2 == 0)
printf("You have entered an even number. Please try again\n\n");
else if (num >= 1 && num <= 9 && num%2!=0)
print_pattern(num);
get_input();
}
void print_pattern(int num)
{
int j,k,l;
for ( j = 0; j<num/2 ; j++ ){
for ( k = 0; k<num/2 - j; k++){
printf(" ");
}
for( l=0; l < (2*j + 1); l++){
printf("%2d",l+1);
}
printf("\n");
}
for( l=0; l <num; l++) // to print middle
{
printf("%2d",l+1);
}
printf("\n");
// to print bottom
for ( j = 0; j<num/2 ; j++){
for ( k = 0; k<j+1 ; k++){
printf(" ");
}
for ( l=1; l< num - (2*j + 1); l++){
printf("%2d",l);
}
printf("\n");
}
}
【问题讨论】:
-
它做了什么而不是终止?卡在哪里了?
-
get_input和is_valid之间存在相互递归。您需要允许其中一个返回而不调用另一个。您想决定何时退出? -
先开始缩进你的代码。
-
print_pattern(num);-->{ print_pattern(num); return; } -
您遇到了设计问题。看起来你应该在 get_input() 中像
do { /*print blablabla*/ } while(!is_valid())一样有一个循环,并且你的 is_valid() 不应该递归调用 get_input(),相反,它应该返回 0 表示假,1 表示真。
标签: c