我需要在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 ++,则将使用cin
或cout
之类的功能,但是在这里,您将使用printf
和scanf
。
要创建此树,您将需要两个部分。一部分处理主树,另一部分处理主干。在下面的代码中,我使用了变量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
确定的一定数量的空格。