c代码打印由'*'组成的三角形?

时间:2015-10-23 12:20:15

标签: c loops while-loop

我想写一个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;
}

4 个答案:

答案 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循环。利用这段时间来了解forwhiledo-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;
}