我需要帮助在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");
}
}
答案 0 :(得分:0)
首先,您的代码使用的是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
确定的一定数量的空格。