使用字符“*”打印二维数组的边框时卡住
Stuck while printing a 2D array's border with the char "*"
基本上我需要做的是使用 C 中的二维数组打印一个“*”的边框。但是我设法打印了边框的一部分,但现在我被困在打印另一边。在这种情况下,我似乎无法找出正确的循环。
我不熟悉 C 编码或任何类型的编码。
-必须是二维数组
-中间有空格
-只打印边框
例如:
***********
* *
* *
***********
到目前为止,我已附上我的代码和该代码的结果。
PS: 我已经使用 malloc 分配了 2Darray
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");
}
result of above code
你从不打印空格。简化代码可能会使它更清晰。您有很多可以消除的冗余代码。类似于:
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;
}
程序输出为
***********
* *
* *
***********
基本上我需要做的是使用 C 中的二维数组打印一个“*”的边框。但是我设法打印了边框的一部分,但现在我被困在打印另一边。在这种情况下,我似乎无法找出正确的循环。
我不熟悉 C 编码或任何类型的编码。
-必须是二维数组
-中间有空格
-只打印边框
例如:
***********
* *
* *
***********
到目前为止,我已附上我的代码和该代码的结果。
PS: 我已经使用 malloc 分配了 2Darray
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");
}
result of above code
你从不打印空格。简化代码可能会使它更清晰。您有很多可以消除的冗余代码。类似于:
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;
}
程序输出为
***********
* *
* *
***********