-1

約 2 週間前に同様の質問を投稿し、問題を解決しました。ただし、いくつかの変更の後、私のプログラムは機能しません。指示は、ユーザーがアスタリスク ( ) で描いた形状の周囲を取り込み、その形状をアスタリスク ( ) で塗りつぶすことです。

2 つの問題があります。

1) The program fails to print the full input shape (at end of getArray function)
2) The program does not fill an input shape problem for row > 9 or column > 9.

これらの問題が発生する理由と、それらを修正する方法を知りたいです。

プログラムコードは次のとおりです(長くて申し訳ありません):

#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("\nPlease 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");
}

void fill(char array[][20], int row, int column)
{
     if(array[row][column] != ' '|| row>20 || row<0 || column>20 || column<0)
     { 
     }
     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++)
     {
              printf("\n");
              for(j = 0; j < 20; j++)
              {
                          printf("%c", array[i][j]);
              }
     }
}

int getRow(void)
{
      int row;

      printf("\nEnter the row of the point: \n");
      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, row = 0, column = 0, num;
    char input;

    printf("To input the perimeter of your shape please use asterisks(*), and the <enter>   key to start a new line.\nEnd the input with the '!' signal\n\n");
    for(i=0;i<20;i++)
    {
               for(j=0;j<20;j++)
               {
                     array[i][j] = ' ';
               }
    }
    i=0;
    j=0;
    while(true)
    {
              input=getchar();
              if(input=='\n')
              {
                     i++;
                     j=0;
                     row++;
                     column = num;
                     num = 0;
              }
              else if(input=='!')
              {
                     if(array[i-1][j] == '*')      row--;      
                     break;
              }
              else
              {
                     array[i][j] = input;
                     j++;
                     num++;
              }
      }
      printf("Your input shape is: \n");

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

例えば:

If the user enters:

**************
*            *****
*                *
*                *
*                *
******************

The output will be:

**************
******************
******************
******************
******************
******************

ただし、私のプログラムでは:

When the input is re-printed, this comes out:

****************  *
*              *****           *
*                  *           *
*                  *           *
*                 ***

And when the fill is printed:

******************
*             ****************
*             ****************
*             ****************
******************
******************

助けていただければ幸いです、ありがとう:)

4

1 に答える 1