这段代码的目标是打印金字塔。首先,我打印一定数量的空间,然后打印一些恒星,最终形成金字塔。
例如,先打印一个5的金字塔,然后在4个空格后打印一颗星,然后改变开始和结束变量,这样新的开始是3,新的结束是6,它将打印3星。
#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("!World!"); /* prints !World! */
pyramid(5);
return 0;
}唯一的事情,似乎是做了一排2星一遍又一遍。
发布于 2015-06-13 02:17:27
你的问题就在这里: start=n-1;end=n+1;
应该是开始=开始+1吗?
我不完全理解你的程序,但我能看出这是你的错误。
发布于 2015-06-13 02:14:21
您将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,结束是6,因此有两颗星。
发布于 2015-06-13 02:33:24
马特McNabb非常接近。
下面的代码包含正确的修补程序
主要的更改是分步“开始”和“结束”,而不是将它们重新初始化为传递的参数。
#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("!World!"); /* prints !World! */
pyramid(5);
return 0;
}https://stackoverflow.com/questions/30814429
复制相似问题