用C打印出二维数组

时间:2016-04-13 03:12:13

标签: c arrays dimensional

我是一名新的CS学生,我很难理解二维数组。现在我只想尝试一次打印出来。

这是我的代码

#include <stdio.h>

#define N 3

int main(void)

{
    int array[N][N], i, j, rows[N], cols[N];


    for(i=0;i<N;i++)
    {
        printf("Enter row %d: ", i+1);
        for(j=0;j<N;j++)
        scanf("%d", &array[i][j]);
    }
    printf("The 5 rows you entered are: \n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%d", array[i][j]);
            printf("\n");
        }
    }
    printf("\n");
    return 0;
}

我想打印出程序:

1 2 3
1 2 3
1 2 3

如果我添加\n,则打印出来:

1\n
2\n
3\n
1\n
2\n
3\n
1\n
2\n
3\n

想象一下\ n是屏幕正在打印的内容,我试图表示代码打印出来的内容。我无法让这个盒子打印出我正在输入的内容。它不会让我反复输入来代表命令屏幕上的实际内容。

没有打印出/n

123123123

我也在尝试添加行和列。我设法找到了一些代码,并且除了一行之外,了解了大部分代码。这是代码。

#include <stdio.h>

int main(void)
{
    int i, j, array[5][5], rows[5],cols[5];

    for(i=0;i<5;i++)
    {
        printf("Enter row %d: ", i+1);
        for(j=0;j<5;j++)
            scanf("%d", &array[i][j]);
    }
    **for(i=0;i<5;rows[i]=cols[i]=0,i++);**
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            rows[i]=rows[i]+array[i][j];
            cols[j]=cols[j]+array[i][j];
        }
    }
    printf("\nRow Totals:    ");
        for(i=0;i<5;i++)
    printf("%d\t", rows[i]);
    printf("\nColumn Totals: ");
    for(i=0;i<5;i++)
        printf("%d\t", cols[i]);
    printf("\n");

    return 0;
}

for(i=0;i<5;rows[i]=cols[i]=0,i++);
是我不明白的路线。首先,我不太了解rows[i]=cols[i]=0,i++。第二,我不明白为什么之后有分号。我认为语句不使用分号,但如果没有这行,或没有分号,程序将无法正常工作。当我尝试使用它没有这行代码时,它给了我疯狂的答案,我假设因为数组中的元素没有设置为0,这行代码将数组的元素设置为0.有人能给我另一行代码对于C相对较新的人来说可能更容易理解?也许可以向我解释为什么它使用分号?

3 个答案:

答案 0 :(得分:4)

  

我想打印出程序:1 2 3 \ n 1 2 3 \ n 1 2 3 \ n

执行:

for(i=0;i<N;i++)
{
    for(j=0;j<N;j++)
    {
        printf("%d", array[i][j]);

    }
    printf("\n");
}


**for(i=0;i<5;rows[i]=cols[i]=0,i++);** 

肯定是语法错误。我猜你添加**来标记声明。然而,

for(i=0;i<5;rows[i]=cols[i]=0,i++);

是有效的C语句。 for循环可以拆分为

形式
for(initilization;condition;increment)

分号分隔for循环的三个部分。在你的情况下 for循环增量部分使用逗号进一步划分为多个语句,如下所示。

for(initialization;condition;do something useful here, update condition variable);

代码的目的是将行和列总和初始化为零 在实际找到总和之前。请注意增量部分中的逗号。它允许您添加多个语句。同样,您可以使用逗号进行多次初始化或多个条件。

for循环后的分号是一个序列点。在这里,请注意您没有for循环的statement / compound-statement。在简单明了的语言中,分号表示for循环执行 nothing 。但是你在for循环中间接初始化行和列总和为零,而for循环本身就很聪明。

很明显,使用不是很直接。如果您不理解这些陈述,我建议您阅读一本好的C编程书。

答案 1 :(得分:2)

for循环有四个部分。你可能习惯于循环:

for (int i = 0; i < 10; i++)
{
    printf("Hello!");
}

for (int i = 0; i < 10; i++)
    printf("Hello!");

第一部分(设置),“int i = 0”,在循环开始时运行。 第二部分(测试表达式),“i&lt; 10”,是条件,在每次迭代之前检查,并且如果它评估为假则结束循环。 第三部分(增量),“i ++”,在每次迭代结束时运行,不进行评估。 第四部分(正文),在第二部分之后和第三部分之前运行。

在for循环的setup和increment部分中,您可以使用逗号分隔多个语句。在测试表达式中使用逗号是没有意义的,因为它需要评估为true或false。在身体中使用逗号也没有意义,因为你可以在那里使用分号。

没有理由不能使用循环本身来为您完成工作。 在您提供的示例中:

 for(i=0;i<5;rows[i]=cols[i]=0,i++);

你已经理解了循环正在做什么(将rows和cols数组中的所有值设置为0.)它只是在循环的增量部分中进行,而不是在循环体中进行。它还利用了赋值操作求值为赋值的事实。因此,“cols [i] = 0”的计算结果为“0”,然后将行[i]赋值给。

但是,for循环总是将下一个语句视为它们的主体。如果你想告诉循环根本不做任何事情,那么你需要在循环之后放置一个空语句(在它前面没有任何内容的分号),以便它知道不做任何其他事情。

如果删除分号,则会假定下一行是循环体,这会产生以下行为:

for(i=0;i<5;rows[i]=cols[i]=0,i++)
{
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            rows[i]=rows[i]+array[i][j];
            cols[j]=cols[j]+array[i][j];
        }
    }
}

对于问题的实际解决方案,请使用sjsam的答案。

答案 2 :(得分:1)

对输出逻辑进行微调

printf("The %d rows you entered are: \n", N);
for(i=0;i<N;i++)
{
    for(j=0;j<N;j++)
    {
        if (j != 0)
        {
            putc(' '); /* add space if we are not the first column */
        }
        printf("%d", array[i][j]);
    }
    putc ('\n'); /* new line after each row is complete */
}
printf("\n");