3

我必须制作一个程序,该程序采用形状的周长,由用户用星号 ( ) 绘制,然后用星号 ( ) 填充形状。
它编译得很好,但我的问题是,当我重新打印形状的周长时,它会打印出时髦的符号,例如:

1ÿu♤☺ x { ⇦@ ☺

另一个问题是,一旦执行填充,星号就全部打印在一行上?

这是我的代码(很长,抱歉)

#include <stdio.h>
#include "simpio.h"
#include "genlib.h"

void getArray(char array[][20]);
int getRow(void);
int getColumn(void);
void fill(char array[][20], int row, int column);
void dispArray(char array[][20]);
void dispMsg(void);

main()
{
      char array[20][20];
      int row, column;

      dispMsg();
      getArray(array);
      printf("Please enter an interior point from which the program starts filling.\n");
      row=getRow();
      column=getColumn();
      fill(array, row, column);
      dispArray(array);

      getchar();
}

void dispMsg(void)
{
      printf("This program will ask you to input the outline of a shape, and it will fill the shape up.\n");
      printf("To input the perimeter of your shape please use asterisks(*), and the <enter>     key to start a new line.\n");
}

void fill(char array[][20], int row, int column)
{
     if(array[row][column]!=' '||row>20||row<20||column>20||column<20)
     {
     }
     else
     {
         array[row][column]=='*';
         fill(array, row, column+1);
         fill(array, row+1, column);
         fill(array, row, column-1);
         fill(array, row-1, column);
     }
}

void dispArray(char array[][20])
{
     int i, j;

     for(i=0;i<20;i++)
     {
              for(j=0;j<20;j++)
              {
                               printf("%c", array[i][j]);
              }
     }
}

int getRow(void)
{
      int row;

      printf("Enter the row of the point: ");
      row=GetInteger();
      return(row);   
}

int getColumn(void)
{
      int column;

      printf("Enter the column of the point: ");
      column=GetInteger();
      return(column);   
}

void getArray(char array[][20])
{
      int i, j;
      char input;

      for(i=0;i<20;i++)
      { 
                       for(j=0;j<20;j++)
                       {
                                        array[i][j] = ' ';
                       }
      }
      while(true)
      {
                 input=getchar();
                 if(input=='\n')
                 {
                    i++;
                    j=0;
                 }
                 else if(input=='!')
                 {
                     break;
                 }
                 else
                 {
                    array[i][j]=input;
                    j++;
                 }
      }
      printf("Your input shape is: \n");
      for(j=0;j<20;j++)
      {
                       for(i=0;i<20;i++);
                       {
                               printf("%c", array[i][j]);
                       }
      }
}

非常感谢 :)

4

1 回答 1

1

另一个问题是,一旦执行填充,星号就全部打印在一行上?

你永远不会打印一个NL字符:

void dispArray(char array[][20])
{
     int i, j;

     for(i=0;i<20;i++)
     {
              for(j=0;j<20;j++)
              {
                               printf("%c", array[i][j]);
              }
              printf("\n");
     }
}

实际上fill()看起来很奇怪:

 // what if row and column are equals to 5 by example?
    void fill(char array[][20], int row, int column) 
    {
         // If row = 5, then this condition is true, same for column = 5.
         // The array will never be filled so ! 
         if(array[row][column]!=' '||row>20||row<20||column>20||column<20)
         {
         }
         else
         {
             array[row][column] = '*'; // By the way, you should use the assigment operator instead of comparison one.
             fill(array, row, column+1);
             fill(array, row+1, column);
             fill(array, row, column-1);
             fill(array, row-1, column);
         }
    }

你应该改变条件。您也许应该使用更简单的迭代方式。

于 2013-07-23T15:01:22.833 回答