c语言 - 打印带有字符"*"的 2D 数组边框时卡住



基本上我需要做的是打印一个"使用C中的2D阵列。然而,我设法打印了边界的一部分,但现在我被困在打印另一面。在这种情况下,我似乎想不出该怎么办。

我对C编码或任何类型的编码都是新手。

-必须是2D阵列

-之间包含空格

-仅打印边界

例如:

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

到目前为止,我已经附上了我的代码和该代码的结果。

PS:我已经使用malloc来分配2D阵列

for(kk=0;kk<10; kk++)
{
for(ll=0;ll<20; ll++)
{
if (kk == 0)
{
basicMap[kk][ll] = '*';
printf("%c", basicMap[kk][ll]);
}
else if(kk == 9)
{
basicMap[kk][ll] = '*';
printf("%c", basicMap[kk][ll]);
}
else if (ll ==0)
{
basicMap[kk][ll] = '*';
printf("%c", basicMap[kk][ll]);
}
else if(ll == 19)
{
basicMap[kk][ll] = '*';
printf("%c", basicMap[kk][ll]);
}
}
printf("n");
}

上述代码的结果

您永远不会打印空格。简化代码可能会使其更加清晰。您有很多可以消除的冗余代码。类似于:

for( kk = 0; kk < 10; kk += 1 ){
for( ll = 0; ll < 20; ll++ ){
if( kk == 0 || kk == 9 || ll == 19 || ll == 0 ){
basicMap[kk][ll] = '*';
} else {
basicMap[kk][ll] = ' '; /* Perhaps redundant, if previously assigned */
}
putchar(basicMap[kk][ll]);
}
putchar('n');
}

如果我理解正确,你正在尝试做下面演示程序中显示的事情。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) 
{
size_t m = 4;
size_t n = 11;

char **a = malloc( m * sizeof( char * ) );

for ( size_t i = 0; i < m; i++ )
{
a[i] = malloc( n * sizeof( char ) );

if ( i % ( m - 1 ) == 0 )
{
memset( a[i], '*', n ); 
}
else
{
memset( a[i] + 1, ' ', n - 2 );
a[i][0] = a[i][n-1] = '*';
}
}

for ( size_t i = 0; i < m; i++ )
{
printf( "%.*s", ( int )n, a[i] );
putchar( 'n' );
}

for ( size_t i = 0; i < m; i++ )
{
free( a[i] );
}

free( a );

return 0;
}

程序输出为

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

最新更新