此代码的目标是打印金字塔。首先,我打印一定数量的空格然后打印一些星星,最终形成一个金字塔。
例如,要首先打印5个金字塔,它将在4个空格后打印一个星形,然后开始和结束变量将被更改,因此新的开始将为3,新的结束将为6,它将打印3个星。< / p>
#include <stdio.h>
#include <stdlib.h>
void printSpaces(int num){
int i;
for(i=0; i<num;i++)
{
printf(" ");
}
}
void pyramid(int n){
int start=n,end=n+1;
int k;
while(start>0 && end<2*n)
{
printSpaces(start);
for (k=start; k<end;k++)
{
printf("*");
}
printf("\n");
start=n-1;
end=n+1;
}
}
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
pyramid(5);
return 0;
}
它似乎只是反复打印一排2颗星。
答案 0 :(得分:1)
你将start设置为n-1,但是n的值永远不会改变。这意味着start将连续设置为相同的值n-1(4)。同样的结束,你的循环永远不会终止。
void pyramid(int n){
int start=n,end=n+1;
int k;
while(start>0 && end<2*n)
{
printSpaces(start);
for (k=start; k<end;k++)
{
printf("*");
}
printf("\n");
start=n-1;
end=n+1;
}
}
此外,在第一次调用时,k将为4,end将为6,因此为两颗星。
答案 1 :(得分:0)
你的问题就在这里: 开始= N-1; 端= N + 1;
它应该像start = start + 1?
我不完全理解你的程序,但我可以说这是你的错误。
答案 2 :(得分:0)
Matt McNabb非常接近。
以下代码包含正确的修复
主要的变化是步骤开始&#39;并且&#39;结束&#39;而不是将它们重新初始化为传递的参数
#include <stdio.h>
#include <stdlib.h>
void printSpaces(int num){
int i;
for(i=0; i<num;i++)
{
printf(" ");
}
}
void pyramid(int n){
int start=n,end=n+1;
int k;
while(start>0 && end<2*n)
{
printSpaces(start);
for (k=start; k<end;k++)
{
printf("*");
}
printf("\n");
start--; //<< corrected
end++; //<< corrected
}
}
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
pyramid(5);
return 0;
}
答案 3 :(得分:0)
用于递减变量end和start的值的过程是错误的
我在此网站的c中找到了关于模式的代码
http://www.programmingsimplified.com/c-program-print-stars-pyramid
if (d > 0){
.....