我的代码应该是这样的金字塔,但只是给了我一行,为什么?我已经尝试改变条件的for和while循环,并没有找到任何解决方案。任何帮助将不胜感激!!
#
##
###
####
#####
######
#######
########
#include <stdio.h>
#include <cs50.h>
int main(void)
{
int n = get_int("Add the height of the pyramid: ");
int j = 0;
for(int i = 0; i < n ; i++) {
while (j <= i) {
printf("#");
j = j + 1;
}
printf("\n");
}
3条答案
按热度按时间ckx4rj1h1#
在
for
循环中声明j
,以便在每次迭代中从0开始。内部循环也可以重写为
for
循环。kkbh8khc2#
虽然answer from @Unmitigated是正确的,但这将是一个将一些功能分解为函数的好地方。
然后:
esbemjvw3#
虽然迭代解决方案(嵌套
for()
循环)是最简单的,但这可能是发现递归的好时机。只要金字塔不太高,不存在堆栈溢出的风险,下面的方法就可以工作(将收集/验证用户输入作为练习)。putchar()
是一个比printf()
简单得多的函数,应该在输出简单的单个字符时使用(为了速度和效率)。如果您仔细思考所介绍的操作,您将了解递归以及有时如何使用它来解决问题。
另一个(尽管"有限")解决方案如下:
puts()
将向stdout输出一个字符串,同时追加一个"newline"。NB:它的更通用的兄弟函数(
fputs()
)以类似的方式工作,但不为您附加LF。做事的方法往往有很多种。
这是另一个使用指针的极简解决方案,它使用了一个"编译时"字符串,所以不容易受用户的影响(但是如果你聪明的话,它可以这样做)。