【问题标题】:Printing 2D array of chars with number representing line at the beginning打印二维字符数组,数字表示开头的行
【发布时间】:2016-01-02 19:49:04
【问题描述】:

以下功能:

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

"array" 在我的函数中是给定大小 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 - - - - -

【问题讨论】:

  • 您没有显示实际定义或打印数组的代码。您在输出中显示在数组设置代码中不明显的空白。但是您可以使用array[i][0] = i + '0'; 在数组中设置一个数字。

标签: c arrays function pointers multidimensional-array


【解决方案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

【讨论】:

  • 是的,这就是我想要的,但你能给我解释一下 '0' + i (我的意思是我知道效果,但需要知道它实际上是如何工作的)的作用吗?谢谢。
【解决方案2】:

我认为 array[i][0] = 'i'; 你的意思是写 array[i][0] = '0'+i;...

请记住,这是在修改数组。如果您想打印数组而不修改它,我们需要查看该代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2016-02-15
    • 2017-12-29
    • 2019-10-24
    • 2014-12-21
    • 2015-12-13
    相关资源
    最近更新 更多