在 C 中打印出二维数组
Printing out 2-dimensional arrays in C
我是一名新的 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++
。其次,我不明白为什么后面有一个分号。我以为 for 语句没有使用分号,但是如果没有这一行,或者没有分号,程序就不能正常工作。当我尝试在没有这行代码的情况下使用它时,它给了我疯狂的答案,我假设是因为数组中的元素未设置为 0 而这行代码将数组的元素设置为 0。有人可以给我吗对于 C 的新手来说,另一行代码可能更容易理解?也许向我解释为什么它使用分号?
I would like to have the program print out: 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循环后的分号是序列点。在这里,请注意您没有 statement/compound-statement for 循环。在简单明了的语言中,分号告诉 for 循环不做 nothing。但是你在本身很聪明的for循环中间接地将行和列的总和初始化为零。
很明显,用法不是很直接。如果您不理解这些语句,我建议您阅读一本很好的 C 编程书籍。
for 循环有四个部分。您可能已经习惯了这样的循环:
for (int i = 0; i < 10; i++)
{
printf("Hello!");
}
或
for (int i = 0; i < 10; i++)
printf("Hello!");
第一部分(设置)"int i = 0" 在循环开始时运行。
第二部分(测试表达式)"i < 10" 是条件,在每次迭代之前检查,如果计算结果为 false 则结束循环。
第三部分(增量)"i++" 在每次迭代结束时运行,不进行计算。
第四部分(正文),在第二部分之后和第三部分之前。
在for循环的setup和increment部分,可以用逗号分隔多个语句。在测试表达式中使用逗号是没有意义的,因为它需要评估为 true 或 false。在正文中使用逗号也没有意义,因为您可以在那里使用分号。
没有理由不使用循环本身来为您完成工作。
在您提供的示例中:
for(i=0;i<5;rows[i]=cols[i]=0,i++);
您已经了解循环在做什么(将 rows 和 cols 数组中的所有值设置为 0。)它只是在循环的递增部分执行,而不是在循环主体中执行。它还利用了赋值操作计算出所赋值这一事实。因此,"cols[i] = 0" 的计算结果为“0”,然后将 rows[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 的答案。
对输出逻辑的微调
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");
我是一名新的 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++
。其次,我不明白为什么后面有一个分号。我以为 for 语句没有使用分号,但是如果没有这一行,或者没有分号,程序就不能正常工作。当我尝试在没有这行代码的情况下使用它时,它给了我疯狂的答案,我假设是因为数组中的元素未设置为 0 而这行代码将数组的元素设置为 0。有人可以给我吗对于 C 的新手来说,另一行代码可能更容易理解?也许向我解释为什么它使用分号?
I would like to have the program print out: 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循环后的分号是序列点。在这里,请注意您没有 statement/compound-statement for 循环。在简单明了的语言中,分号告诉 for 循环不做 nothing。但是你在本身很聪明的for循环中间接地将行和列的总和初始化为零。
很明显,用法不是很直接。如果您不理解这些语句,我建议您阅读一本很好的 C 编程书籍。
for 循环有四个部分。您可能已经习惯了这样的循环:
for (int i = 0; i < 10; i++)
{
printf("Hello!");
}
或
for (int i = 0; i < 10; i++)
printf("Hello!");
第一部分(设置)"int i = 0" 在循环开始时运行。 第二部分(测试表达式)"i < 10" 是条件,在每次迭代之前检查,如果计算结果为 false 则结束循环。 第三部分(增量)"i++" 在每次迭代结束时运行,不进行计算。 第四部分(正文),在第二部分之后和第三部分之前。
在for循环的setup和increment部分,可以用逗号分隔多个语句。在测试表达式中使用逗号是没有意义的,因为它需要评估为 true 或 false。在正文中使用逗号也没有意义,因为您可以在那里使用分号。
没有理由不使用循环本身来为您完成工作。 在您提供的示例中:
for(i=0;i<5;rows[i]=cols[i]=0,i++);
您已经了解循环在做什么(将 rows 和 cols 数组中的所有值设置为 0。)它只是在循环的递增部分执行,而不是在循环主体中执行。它还利用了赋值操作计算出所赋值这一事实。因此,"cols[i] = 0" 的计算结果为“0”,然后将 rows[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 的答案。
对输出逻辑的微调
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");