为啥for循环在c中无限进行
Posted
技术标签:
【中文标题】为啥for循环在c中无限进行【英文标题】:why is the for loop going on infinitely in c为什么for循环在c中无限进行 【发布时间】:2021-07-08 19:52:48 【问题描述】:我的问题是当我运行代码时,循环会无限进行。预期的输出是打印 hi 5 次然后转到新行并打印 4 次 3 等等我无法理解是什么导致循环无限。
#include <stdio.h>
int star(int);
int main()
printf("enter number\n");
int a;
scanf("%d", &a);
star(a);
return 0;
int star(int m)
int n;
for (n = 0; n < m; n++)
printf("hi");
printf("\n");
star(m - 1);
return 0;
【问题讨论】:
你有没有终止条件的递归。 我..看看你的代码。star
什么时候会不再自称?
我如何在 c 初学者中添加终止条件
取决于你想要做什么。
您可能想以if (m < 0) return 0;
之类的开头star
或使用if(m > 0) star(m-1);
保护star(m-1);
。这样,一旦 m 变为负数,它就不会继续调用自己。
【参考方案1】:
您忘记检查函数中某处是否 m > 0。在这种情况下,循环会无限循环,因为它没有办法摆脱递归。
简单修复:
#include <stdio.h>
int star(int);
int main()
printf("enter number\n");
int a;
scanf("%d", &a);
star(a);
return 0;
int star(int m)
int n;
for (n = 0; n < m; n++)
printf("hi");
printf("\n");
if (m > 0)
star(m - 1);
return 0;
【讨论】:
我现在明白了,感谢您的帮助【参考方案2】:对于初学者来说,函数star
的返回类型是无用的,没有任何意义。此外,将参数声明为有符号整数类型int
也没有什么意义。将参数声明为至少具有无符号整数类型unsigned int
在逻辑上更正确。
所以函数应该这样声明
void star( unsigned int n );
函数无限递归调用自身,因为这样的调用是无条件的,不依赖于参数m
的值。
int star(int m)
//...
star(m - 1);
return 0;
该函数可以通过以下方式定义,如下面的演示程序所示。
#include <stdio.h>
void star( unsigned int );
int main( void )
printf( "Enter number: " );
unsigned int n;
if ( scanf( "%u", &n) == 1 ) star( n );
return 0;
void star( unsigned int n )
if ( n )
for ( unsigned int i = 0; i < n; i++)
printf( "hi" );
putchar( '\n' );
if ( --n ) star( n );
请注意,如果最初调用函数时参数等于 0,则该函数不应输出任何内容。
【讨论】:
感谢您的帮助,现在我明白了。以上是关于为啥for循环在c中无限进行的主要内容,如果未能解决你的问题,请参考以下文章
c语言里面,我for语句的循环跨度如果想是0.5应该怎么打呢,平时就是1++那么1+=0.5为啥
RecyclerView里面嵌套一个无限循环的横向列表该怎么做