我想写一个C程序,它可以打印一个由星号组成的三角形。基于用户给出的行数。它应该看起来像代码示例中给出的那个。但我没有得到理想的结果。有人可以在代码中找到错误吗?请注意我是初学者,我不关心运行时和所有,所以请尽可能提供最简单的代码。感谢。
输出
*
**
***
代码清单
#include <stdio.h>
int main()
{
int r;
int rp=1;
int cp=1;
printf("enter number of rows: ");
scanf("%d", &r);
while(rp<=r)
{
while (cp<=rp)
{
printf("* %s\n");
cp=cp+1;
}
rp=rp+1;
}
return 0;
}
答案 0 :(得分:2)
你应该在第二次循环之前将cp初始化为1。
此外,打印时不需要%s
答案 1 :(得分:1)
您在第一次忘记将cp
设置为1。顺便说一句,你应该养成从0开始计数器的习惯(这意味着你应该使用<
代替<=
)
答案 2 :(得分:1)
cp
未在外循环中重置。
由于您的初始条件,退出条件和每循环操作,您提供的代码也可以通过使用for
循环来更容易阅读;都列在一行上。
代码清单
#include <stdio.h>
int main()
{
int rows;
printf("Enter number of rows: ");
scanf("%d", &rows);
int i, j;
for ( i = 0; i < rows; i++ )
{
for ( j = 0; j <= i; j++ )
{
printf("*");
}
printf("\n");
}
return 0;
}
示例输出
Enter number of rows: 10
*
**
***
****
*****
******
*******
********
*********
**********
但是,如果您坚持使用原始样式,则只需在第一个while循环后添加cp = 1
。
替代代码清单
#include <stdio.h>
int main()
{
int r;
int rp=1;
int cp=1;
printf("enter number of rows: ");
scanf("%d", &r);
while(rp<=r)
{
while (cp<=rp)
{
printf("*");
cp=cp+1;
}
cp = 1;
printf("\n");
rp=rp+1;
}
return 0;
}
如果您知道自己将在固定范围内进行迭代,for
循环就是您的朋友。如果您将永远循环直到用户输入特定输入,或者您正在轮询某个函数/进程/外设直到状态发生变化,那么您可能需要while
循环。利用这段时间来了解for
,while
和do-while
循环之间的差异,以及进入条件和退出条件循环之间的区别。
最后,正如其他人回答的那样:养成让索引开始为零的习惯,而不是一个。在将来习惯使用[0, n-1]
索引而不是[1, n]
索引时,它将为您节省很多痛苦。
答案 3 :(得分:0)
#include <stdio.h>
int main()
{
int r;
int rp=1;
int cp=1;
printf("enter number of rows: ");
scanf("%d", &r);
while(rp<=r)
{
while (cp<=rp)
{
printf("* %s\n");
cp=cp+1;
}
cp = 1;
printf("\n");
rp=rp+1;
}
return 0;
}