打印字符的二维数组,数字代表行的开头

时间:2016-01-02 19:49:04

标签: c arrays function pointers multidimensional-array

以下功能:

char **fill(char **array, int *size) {

    int i,j;

    for ( i = 0; i < *size; i++ ) {
        for (j = 0; j < *size; j++ ) {
            array[i][j] = '-';  
        }   
    }   

    return array;
}

输入:5

提供输出:

    - - - - - 
    - - - - - 
    - - - - - 
    - - - - - 
    - - - - -

如何编辑代码以获得如下输出:

   0 - - - - - 
   1 - - - - - 
   2 - - - - - 
   3 - - - - - 
   4 - - - - -
我的函数中的“数组”是给定大小为n的字符的二维数组。当我得到n的输入时,我试图为n + 1个字符分配每行而不是n,并使这样的函数成为:

char **fill(char **array, int *size) {

        int i,j;

        for ( i = 0; i < *size; i++ ) {
            array[i][0] = 'i';
            for (j = 1; j < ( *size + 1 ); j++ ) {
                array[i][j] = '-';  
            }   
        }   

        return array;
    }

但它不起作用。

输入:5 输出:

   i - - - - - 
   i - - - - - 
   i - - - - - 
   i - - - - - 
   i - - - - -

2 个答案:

答案 0 :(得分:1)

您正在打印字符'i',但您必须打印从'0'到'9'的字符:

 for ( i = 0; i < *size; i++ ) {
        array[i][0] = '0' + i; // <-
        for (j = 1; j < ( *size + 1 ); j++ ) {
            array[i][j] = '-';  
        }   
    }

从'0'到'9'的字符具有从48到57的ASCII代码。'0' + i表示具有ASCII代码48+i的字符。上面的代码从0到9工作。如果i==10,则打印':',因为':'是ASCII码58(48 + 10)的字符。 请参阅ASCII table和问题Char - ASCII relation

答案 1 :(得分:0)

我认为array[i][0] = 'i';你打算写array[i][0] = '0'+i; ...

请记住,这是修改数组。如果你想打印数组而不修改它,我们需要看到那个代码。