-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");
    }
}

我的程序大部分都可以工作,但是当它打印填充的形状时,它会在每一行中添加一个额外的字符。例如,如果用户输入它

    ***
    * *
    ***

然后输出将是

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

而它应该是

***
***
***

有谁知道我该如何解决这个问题?

4

1 回答 1

0

尽管您的代码中存在几个潜在问题,但我将仅确定第 4 列 * 的问题。在下面的代码中,尽管您正在签ch!=10入,但在终止循环之前已分配for statement了 的值。所以你可能想做.a[i][j]TRUEif(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 回答