我不明白为什么这不起作用

时间:2015-06-13 02:10:00

标签: c

此代码的目标是打印金字塔。首先,我打印一定数量的空格然后打印一些星星,最终形成一个金字塔。

例如,要首先打印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颗星。

4 个答案:

答案 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){
    .....