题
好的,所以我需要让输出看起来像星号菱形,每行增加 2 个星号,直到中间有 9 个星号......然后行减少。函数 main 必须是:
int main (void){
int i;
i = 0;
while (i < 5){
printline (4-i, i*2+1);
i = i + 1;
}
i = 3;
while (i >= 0) {
printline (4-i, i*2+1);
i = i - 1;
}
return 0;
}
现在我应该定义函数 printline 以在每次调用时打印图形的一行。它需要 2 个参数,即应在该行上打印的空格数和星号数。使用计数器控制的重复打印适当数量的空格,然后再次打印适当数量的星号。
char print_line (int spaces, int stars){
for (int i = 4; i>=spaces; i--){
printf(" ");
}
for (int i = 1; i<=stars; i+=2){
printf("*");
}
printf("\n");
}
呜呼!我就快完成了!输出有点正确,除了不是一行有 4 个空格和一个星号的行,而是一条有 3 个空格和 3 个星号的行,依此类推,直到没有空格和 9 个星号,(然后反转)...我得到一行带有一颗星,一条带有空格和 2 颗星的线,带有两个空格三颗星的线,等等,最多 4 个空格五颗星(然后反转)...
printline 不同的原因是因为我有时会遇到问题,每当我尝试写它时,我都会得到斜体......
解决方案
一些提示:
- 您的函数只需要打印字符,它不会返回任何内容(有一个特定的返回类型)
- 要打印的空格数和星星数可能是整数
- 您可以使用打印单个空格
printf(" ");
- 您可以使用打印一颗星星
printf("*");
- 您可以使用以下命令打印“换行符”(转到下一行)
printf("\n");
- 如果你说
int i=0; for(i=0; i<n; i++) { printf("X"); }
你将打印这封信X
总共n
次(此时你可能还没有学会 for 循环;如果没有,请使用下一个提示) - 如果你说
int i=0; while(i<n) { printf("X"); i++; }
您还将打印这封信X
总共n
次 - 如果您使用除以下之外的参数名称,您会更高兴
a
和b
. 。尝试想一个与参数对应的名称 代表.
对您的编辑的回应:
- 您将需要使用两个 分离 循环;一个打印空格,然后一个打印星星
for
循环始终由一个初始值设定项、一个检查条件和一个步长/增量来构造- 您不需要将值分配给
stars
或者spaces
;它们是打电话给您的人给您的号码printline
函数(即他们已经有一个价值)
对您的第二次编辑的回应:
- 在你的
for
循环,您可能想使用索引变量 其他 比传入的参数(例如for(i=0; i<spaces; i++)
, , 在哪里i
只是您在函数顶部声明的计数器,就像在赋值的代码中一样)在您当前的构造中,它将尝试打印 4 个空格,无论调用者在调用您的函数时指定什么。 - 你只需要输出一次换行符, 后 你已经完成了所有的空格和星星(即输出换行符不属于
for
环形) - 您可能只需要增加计数器
1
每次输出一颗星。 - 如果作业要求创建一个名为
printline
, ,你不能调用它print_line
;那不是同一件事(也不是PrintLine
)
对您的第三次编辑的回应:
- 不要忘记“您可能只需要增加计数器
1
每次你输出一颗星星。” - 不要忘记“您的函数只需要打印字符,它不会返回任何内容(有一个特定的返回类型)”(即它不应该返回
char
) - 我认为您希望打印空格的代码看起来更像打印星星的代码
不隶属于 StackOverflow