我需要在C中创建圣诞树的帮助,该圣诞树根据用户输入而有所不同。

首先,提示用户输入他们想要在树上的级别数。例如。第一层为“ *”,第二层为“ ***”。每级增加两颗星。

有效级别在4到10(含)之间。小于4或大于10的任何值都是无效的,错误消息将显示在程序输出中,并且还将显示树的最小级别(4个级别)。

树的最后一部分是通过添加一个宽度为3星,高度为2星的树干来完成的。

这是我的C程序。它是不完整的,我不知道如何继续。我很困惑。

 #include <stdio.h>
void main()
{
    char choice;
    int level, levelcount, star, starcount;



    printf("Do you want to print a Christmas Tree (Y/N)?");
    scanf_s(" %c", &choice);

    if (choice == 'Y')
    {
        printf("How tall is your Christmas Tree (Level 4 to 10)?");
        scanf_s("%d", &levelcount);

    starcount = 1;
    for (level = 1; level <= levelcount; level++)
    {
        for (star = 1; star <= starcount; star++)
        {
            printf("*");
        }
        printf("\n");
    }
        starcount += 2;
    }
    else if (choice == 'N')
    {
        printf("Merry Christmas and Goodbye!\n");
    }


}

最佳答案

首先,您的代码使用C而不是C ++。如果您使用的是C ++,则将使用cincout之类的功能,但是在这里,您将使用printfscanf

要创建此树,您将需要两个部分。一部分处理主树,另一部分处理主干。在下面的代码中,我使用了变量offset来计算确定树的中点的特定数字。基本上,每个级别都有奇数个星星。如果从星数中减去偏移量,则会在中点找到数字。从3开始,偏移为1。3-1-2 =中点。对于添加到关卡中的每两颗星,偏移量必须增加一。

要打印树:

#include <stdio.h>
void main()
{
    char choice;
    int level, levelcount, star, starcount, offset;

    printf("Do you want to print a Christmas Tree (Y/N)?");
    scanf_s(" %c", &choice);

    if (choice == 'Y')
    {
        printf("How tall is your Christmas Tree (Level 4 to 10)?");
        scanf_s("%d", &levelcount);

        //Check if level is within valid range
        starcount = 1;
        offset = 0;
        if (levelcount < 4 || levelCount > 10)
        {
            //Prints default tree (4 levels)
            for (level = 1; level <= 4; level++)
        {
            for(star = 1; star <= starcount; star++)
            {
                printf("*");
            }
            printf("\n");
            //Adds two stars each level
            starcount += 2;
            offset += 1;
        }
    }
        else
        {
            //Prints tree with custom levels
            for (level = 1; level <= levelCount; level++)
            {
                for(star = 1; star <= starcount; star++)
                {
                    printf("*");
                }
                printf("\n");
                //Adds two stars each level
                starcount += 2;
                offset += 1;
            }
        }

        //Finds out the mid-point of the tree
        int midpoint = starcount - offset;

        //Prints the trunk
        printf("%*s%s\n", offset - 1, "***");
        printf("%*s%s\n", offset - 1, "***");

    }
    else if (choice == 'N')
    {
        printf("Merry Christmas and Goodbye!\n");
    }
}


对于主干部分,由于它的固定宽度为3星,只有两个级别,因此并不一定需要循环,但最好将其包括在内。 %*s是一个特殊的修饰符,用于在左侧打印一些额外的空格,使其位于树的中点。

有关在C check this answer by Bill the Lizard中使用空格填充的更多信息。答案下方的评论之一将显示我如何设法打印由变量offset - 1确定的一定数量的空格。

08-25 01:01