在C语言中初始化多维数组,并打印其内容

3
#include <stdio.h>

int main (void)
{

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

    printf("Weiners:\n_______\n");

    for(x=0;x<=3;++x){
        for(y=0;y<=2;++y){
        printf("%i, ", weiners[x][y]);
        }
        printf("\n");
    }

    return 0;

}

这只是简单地创建一个小的多维数组,然后使用循环来打印内容。它会正确格式化,前三列是正确的,但其后的数字非常不正确。我不确定出了什么问题。

http://i.stack.imgur.com/TSX2M.png

4个回答

2
你正在定义一个 int[3][2],并用 4 x 3 个项目进行初始化,因此一旦循环到第六个值后,最后几个项目将未定义。

gcc 抱怨它:

array.c: In function `main':
array.c:7: warning: excess elements in array initializer
array.c:7: warning: (near initialization for `weiners[0]')
array.c:8: warning: excess elements in array initializer
array.c:8: warning: (near initialization for `weiners[1]')
array.c:9: warning: excess elements in array initializer
array.c:9: warning: (near initialization for `weiners[2]')
array.c:10: warning: excess elements in array initializer
array.c:10: warning: (near initialization for `weiners[3]')
array.c:10: warning: excess elements in array initializer
array.c:10: warning: (near initialization for `weiners')

1

你的数组需要是[4][3]。


好的回答。但是慢了90秒! - Joseph Quinsey

1
你的数组声明不正确(它是4x3而不是3x2):
int weiners[4][3] = {
                   {5, 10, 8},
                   {8, 4, 7},
                   {3, 1, 2},
                   {0, 7, 9}
                 };

或者,您可以使用实际上是3x2的数组(而不是4x3),然后修复您的for循环以使用匹配的索引:

for(x=0;x<3;++x) {
    for(y=0;y<2;++y) {

@JonMartin 嗯,更确切地说是两者不匹配... 我不确定哪个是“正确”的。 - Reed Copsey
感谢您的帮助。我刚开始使用C语言的多维数组,现在我知道我错在哪里了。再次感谢。 - steverngallo

0

您输入的行数和列数格式不正确,请按照以下格式输入:

int array[rows][colums]

这里行数为4,列数为3;

相应地更改循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接