首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不明白为什么这不管用

我不明白为什么这不管用
EN

Stack Overflow用户
提问于 2015-06-13 02:10:00
回答 4查看 97关注 0票数 0

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

例如,先打印一个5的金字塔,然后在4个空格后打印一颗星,然后改变开始和结束变量,这样新的开始是3,新的结束是6,它将打印3星。

代码语言:javascript
复制
#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星一遍又一遍。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-13 02:17:27

你的问题就在这里: start=n-1;end=n+1;

应该是开始=开始+1吗?

我不完全理解你的程序,但我能看出这是你的错误。

票数 0
EN

Stack Overflow用户

发布于 2015-06-13 02:14:21

您将start设置为n-1,但n的值从未改变。这意味着start将连续设置为相同的值,n-1(4)。与结束相同,您的循环永远不会终止。

代码语言:javascript
复制
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,因此有两颗星。

票数 1
EN

Stack Overflow用户

发布于 2015-06-13 02:33:24

马特McNabb非常接近。

下面的代码包含正确的修补程序

主要的更改是分步“开始”和“结束”,而不是将它们重新初始化为传递的参数。

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30814429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档