使用字符“*”打印二维数组的边框时卡住

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

程序输出为

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