如何在c中终止程序?
所以我完成了我的代码,它提供了所需的输出,但它并没有终止!我该如何解决它? 我试过了,但没有找到合适的位置来保存它 所以我完成了我的代码,它提供了所需的输出,但它并没有终止!我该如何解决它? 我试图返回,但没有找到合适的地方,以保持它如何在c中终止程序?
#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");
}
}
这是一个在无限循环
main
电话get_input
这就要求is_valid
它调用get_input
作出间接递归那里。
如果你想终止,输入一些,如果条件NUM像if (num < 0) return
当您使用if-else语句,你应该使用{}来创建块,除非块是单内衬。
例如,当您使用
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();
它将调用get_input()每次调用is_valid()被解读为
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();
这将导致在一个无限循环结束。 为了防止循环,只在需要时将调用插入get_input()。
此外,请确保您的块(每个{}之间的部分)定义良好,并且不会过早关闭它们,也不会关闭它们而是关闭它们。这也会导致循环,特别是如果在有循环的地方做错了。
此外,关于if-else语句,最后的else-if是多余的。如果num不大于9,甚至不小于1,那么它必须是合法的输入,并且不需要在那里添加if语句。
即使有条件地调用'get_input()'而不是每次调用都会允许程序终止,每次满足条件时递归深度仍会增加......他会更好地使用循环而不是递归。 – Dmitri
它做什么而不是终止?它卡在哪里? – Carcigenicate
你在'get_input'和'is_valid'之间有相互递归。你需要允许其中的一个返回而不用调用其他的。你想决定什么时候退出? – Carcigenicate
首先开始缩进代码。 –