我已经创建了一系列for循环但由于某种原因,我继续获得无限多的#s作为我的输出。我不确定为什么会这样。我是编程的初学者,我有点困惑。我的代码是:
for (int i = 0; i < h; i++)
{
for (int x = 0; x < 0; x = -1 * i + (h - 1))
{
printf(" ");
}
for (int y = 0; y < h + 1; y = i + 2)
{
printf("#");
}
printf("\n");
}
我想要获得的输出如下:
##\n
###\n
####\n
#####\n
######\n
如果有人可以帮助我,我将非常感激:)
谢谢
在第三个for循环中你有for (int y = 0; y < h + 1; y = i + 2)
增量语句y = i + 2
在每次运行通过主体后重置循环变量y
到相同的值,如果这个值小于h
你得到一个无限循环。
你可以试试这个:
int h = 7;
for (int i = 0; i < h; i++)
{
int x;
for (x = 0; x < h - i; x++)
{
printf(" ");
}
for (int y = -2; y < i; y++)
{
printf("#");
}
printf("\n");
}
这会产生:
##
###
####
#####
######
#######
########
编辑:要将#
1空格的三角形向左移动,需要将第二个循环更改为
for (x = 0; x < h - i - 1; x++)
{
printf(" ");
}
打印空格的循环将永远不会执行 - 您将x
初始化为0,然后循环,而x < 0
则立即为false。
循环打印'#'
永远不会退出,因为y
没有在循环中修改y = i + 2
将不会推进y
- 它将简单地无限期地赋予它值2
。你实际上在之前的x
循环中有一个类似的问题,它从来没有那么远。
通过使用调试器和步进代码而不是在SO上发布问题,可以最容易地发现上述内容。
实际上,只使用一个内循环就可以生成模式:
for( int i = 0; i < h; i++ )
{
for( int x = 0; x < h + 1; x++ )
{
putchar( x < h - i - 1 ? ' ' : '#' ) ;
}
putchar( '\n' );
}
或者可能不那么“聪明”:
for( int i = 0; i < h; i++ )
{
for( int x = 0; x < h + 1; x++ )
{
if( x < h - i - 1 )
{
putchar( ' ' ) ;
}
else
{
putchar( '#' ) ;
}
}
putchar( '\n' );
}
这个问题是您不会更改循环变量x
和y
的值,因此它们不会正常终止。你的程序继续执行第二个for
循环的块。
让我们来看看第一个for
:
for (int x = 0; x < 0; x = -1 * i + (h - 1))
当执行此操作时,h
和i
是固定的,你也不会在这个for
循环的主体中更改它们。让我们说h
是10
; i
是0
。
这意味着它开始于x
是0
。它没有执行它的块,因为x < 0
是假的。
然后第二个for
:
for (int y = 0; y < h + 1; y = i + 2)
如果你解决这个问题,你会发现在第一次迭代之后,y
将永远是0 + 2
是2
。循环条件变为:2 < 10 + 1
(再次假设h
是10
),这总是正确的。这意味着你的循环继续旋转for
ever。
试试这个:
for (int i = 0; i < h; i++)
{
for (int x = 0; x < h - i; x++)
{
printf(" ");
}
for (int y = i; y < h; y++)
{
printf("#");
}
printf("\n");
}
我认为它有一两个OBO(Out-By-One错误),但我相信你很快就能解决这个问题。