gpt4 book ai didi

c - C中的递归形状填充程序

转载 作者:行者123 更新时间:2023-12-02 03:44:46 25 4
gpt4 key购买 nike

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

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

非常感谢:)

最佳答案

Another problem is that once fill is executed the asterisks are just all printed on one line?

你永远不会打印 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);
}
}

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

关于c - C中的递归形状填充程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17813681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com