-1

ユーザーが形状の文字ボーダーを入力すると、形状を塗りつぶすプログラムをCで作成しようとしています。

http://pastebin.com/aax1dt0b

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

#define size 100

bool initArray(bool a[size][size]);
bool getshape(bool a[size][size]); /* Gets the input of the boarder of the shape from         the user */
void fill(int x, int y, bool a[size][size]); /* fills the shape */
void printarray(bool a[size][size]); /* prints the filled shape */


main()
{
    int x, y;
    char i;
    bool a[size][size];
    initArray(a);
    getshape(a);
    printf("Enter the coordinates of the point the shape should be filled.\n");
    printf("x=n\n"); /* gets the coordinates of the array to begin the fill algorithm from */
    x = GetInteger();
    printf("y=\n");
    y = GetInteger();
    fill(x, y, a);
    printarray(a);
    printf("Scroll up to view your filled shape\n");
    getchar();
}

bool initArray(bool a[size][size])
{
    int i, j;
    for (i = 0; i < 100; i++)
    {
        for (j = 0; j < 100; j++)
        {
            a[i][j] = FALSE;
        }
    }
}

bool getshape(bool a[size][size])
{
    int i, j, k;
    bool flag;
    char ch;
    ch = 1;
    printf("Enter your shape. When you are finished, type 'E'. \n");
    for (i = 0; i < 100; i++) 
    {
        flag = TRUE;
        for (j = 0; ch != 10; j++)
        {
            ch = getchar();
            if (ch == 69)
            {
                return a;
            }
            if (ch != 32) a[i][j] = TRUE;
        }

        ch = 1;
    }
}


void fill(int x, int y, bool a[size][size])
{
    if (a[y][x] != TRUE) a[y][x] = TRUE;
    if (a[y][x - 1] != TRUE) fill(x - 1, y, a);
    if (a[y - 1][x] != TRUE) fill(x, y - 1, a);
    if (a[y][x + 1] != TRUE) fill(x + 1, y, a);
    if (a[y + 1][x] != TRUE) fill(x, y + 1, a);
}

void printarray(bool a[size][size])
{
    int i, j;
    printf("\n\n\n");
    for (i = 0; i < 100; i++) 
    {
        for (j = 0; j < 100; j++)
        {
            if (a[i][j] == FALSE) printf(" ");
            if (a[i][j] == TRUE) printf("*");
        }
        printf("\n");
    }
}

私のプログラムはほとんどの場合機能しますが、塗りつぶされた形状を印刷すると、各行に 1 文字追加されます。たとえば、ユーザーがそれを入力した場合

    ***
    * *
    ***

次に、出力は次のようになります

****
****
****  (one extra row then it should be)

一方、それはあるべきです

***
***
***

誰も私がこれを修正する方法を知っていますか?

4

1 に答える 1

0

コードには潜在的な問題がいくつかありますが、4 列目の * の問題だけを特定します。以下のコードでは、 をチェックch!=10インしていますが、ループを終了する前にfor statementの値がa[i][j]割り当てられています。TRUEだからあなたはしたいかもしれませんif(ch!=32 && ch!=10) a[i][j]=TRUE;

                     flag=TRUE;
                     for(j=0;ch!=10;j++)
                     {
                                      ch=getchar();
                                      if(ch==69)
                                      {
                                                return a;
                                      }
                                      if(ch!=32) a[i][j]=TRUE;
                     }

                     ch=1;
于 2012-05-02T22:38:19.910 に答える