基本上我需要做的是打印一个"使用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;
}
程序输出为
***********
* *
* *
***********