多维阵列打印带来了不同的东西

时间:2013-04-06 07:33:13

标签: c multidimensional-array

#include <stdio.h>

int main(int argc, char **argv) {

int x[5][5] = {{0,1,2,3,4},{5,6,7,8,9}};

for (int i = 0; i < 4; i++) {
    for (int j = 0; i < 4; i++) {
        printf("%d\n", x[i][j]); } }

return 0; }

这应该给我:0 1 2 3 4 5 6 7 8 9

结果是:0 5 0 0

然后,当我将它们改为chars时:

#include <stdio.h>

int main(int argc, char **argv) {

char x[5][5] = {{'0','1','2','3','4'},{'5','6','7','8','9'}};

for (int i = 0; i < 4; i++) {
    for (int j = 0; i < 4; i++) {
        printf("%d\n", x[i][j]); } }

return 0; }

我得到48 53 0 0。

为什么呢?代码对我来说非常清楚,但似乎在背景上发生了一些模糊不清的事情(或者我的大脑以非常“pythonic”的方式工作......)

2 个答案:

答案 0 :(得分:7)

就像@Keith Thompson所说,你没有初始化所有25个元素。因此剩下的元素初始化为0。因此,数据将以这种方式存储:

  0 | 1 | 2 | 3 | 4     // Row 0
  5 | 6 | 7 | 8 | 9     // Row 1
  0 | 0 | 0 | 0 | 0     // Row 2
  0 | 0 | 0 | 0 | 0     // Row 3
  0 | 0 | 0 | 0 | 0     // Row 4

您只初始化了数组的前两行。这就是您输出0 5 0 0的原因。

要获得正确的输出,您需要循环遍历数组的前两行。

解决此问题的步骤:

<强>第一

您需要更改第一个for循环:

for (int i = 0; i < 4; i++)

for (int i = 0; i < 2; i++)

原因:因为您只想循环前两行(第0行和第1行)

<强>第二

您需要更改第二个for循环:

for (int j = 0; i < 4; i++)

为:

for (int j = 0; j < 5; j++)

原因:您的循环条件需要变量j,而不是i。您还需要从4更改为5;因为在数组中,索引从0开始。因此,每列的索引分别为0,1,2,3,4

总结一下,你的代码应该是......

for (int i = 0; i < 2; i++) 
{
    for (int j = 0; j < 5; j++) 
    {
        printf("%d\n", x[i][j]); 
    } 
}

此外,当您更改为char x[5][5]时,您需要使用%c来打印字符,而不是%d

此外,您获得48等奇怪数字的原因是因为当您使用char打印%d时,实际上您正在打印其ASCII值。参考下面的ASCII表,数字48代表字符'0'

http://www.asciitable.com/ 来自http://www.asciitable.com/

的图片

答案 1 :(得分:0)

for(i = 0 ; i < 2 ; i++)
for(j = 0 ; j < 5 ; j++)
printf("%d\n",x[i][j]);

我不知道你为什么只初始化了2个1-d阵列。但是更改for循环中的边界应该足以满足您的需求