我在edX中学习cs50的C语言一天。edX中的cs50的第一周是关于做出几行锐化,其数量随着行数的增加而递增,如下所示:
#
##
###
####
#####如果我回答"Height=5“。
我不知道该怎么做。我能在这段代码中做些什么?
下面是我的代码:
// Print escalating numbers of sharp marks
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Height:");
}
while (n > 1 && n < 8);
for (int i = 0; i < n; i++)
{
for (int j = 0; j == n; j++)
{
printf("#");
}
printf("\n");
}
}发布于 2020-07-25 17:01:28
你的程序有两个基本问题:
1.
do while循环n > 1 && n < 8的条件错误。这样,只要n在1和8之间,就可以迭代该循环。我认为你想要的正好相反--只有当n不在1和8之间时才进行迭代。请改用n < 1 || n > 8或!(n > 1 && n < 8)。
2.
内部for循环的条件也是错误的。for (int j = 0; j == i; j++) -使用该选项,每行只打印一个#。相反,您需要for (int j = 0; j <= i; j++)。
3.
您需要在输入后打印换行符,才能正确格式化#%s的输出。
#include <cs50.h>
#include <stdio.h>
int main (void)
{
int n;
do
{
n = get_int("Height: ");
}
while (n < 1 || n > 8);
putchar('\n');
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf("#");
}
printf("\n");
}
}执行:
./a.out
Height: 5
#
##
###
####
#####从技术上讲,当您不想使用额外的语句打印换行符时,还有另一种偷偷摸摸的方法来实现。
在这里,我们将外部for循环语句更改为for (int i = 0; i <= n; i++),将内部循环语句更改为for (int j = 0; j < i; j++)。
我们在外部for循环中使用了更多的迭代,并且在第一个演练中只打印换行符。
#include <cs50.h>
#include <stdio.h>
int main (void)
{
int n;
do
{
n = get_int("Height: ");
}
while (n < 1 || n > 8);
for (int i = 0; i <= n; i++)
{
for (int j = 0; j < i; j++)
{
printf("#");
}
printf("\n");
}
}执行:
./a.out
Height: 5
#
##
###
####
#####https://stackoverflow.com/questions/63086047
复制相似问题