我正在为我参加的 C 编程课程的实验分配工作。我在本地的 Cygwin 目录中编写了代码,使用了
当我将代码复制到学校的 UNIX 服务器上并使用
我尝试使用
错误信息提到了初始化数组
gcc
进行编译,生成的可执行文件没有任何错误,功能也与我的预期完全一致。当我将代码复制到学校的 UNIX 服务器上并使用
gcc
进行编译时,没有出现任何错误,但运行时没有任何反应。我尝试使用
gcc 2darray.c -Wall -pedantic
,返回了以下内容:2darray.c: In function 'main':
2darray.c:5:3: warning: missing braces around initializer [-Wmissing-braces]
2darray.c:5:3: warning: (near initialization for 'M[0]') [-Wmissing-braces]
2darray.c:5:24: warning: C++ style comments are not allowed in ISO C90 [enabled by default]
2darray.c:5:24: warning: (this will be reported only once per input file) [enabled by default]
错误信息提到了初始化数组
M
的问题,但我没有看出我初始化它的方式有任何问题。这是我正在尝试编译的代码:#include <stdio.h>
int main(void)
{
int M[10][10] = {0}; // creating a 10x10 array and initializing it to 0
int i, j; // loop variables
int sum[10] = {0}; // creating an array to hold the sums of each column of 2d array M
for (i = 1; i < 10; i++) // assigning values to array M as specified in directions
{
for (j = i - 1; j < i; j++)
{
M[i][j] = -i;
M[i][j+1] = i;
M[i][j+2] = -i;
}
}
for (i = 0; i < 10; i++) // printing array M
{
for(j = 0; j < 10; j++)
{
printf("%3d", M[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < 10; i++) // calculating sum of each column
{
for (j = 0; j < 10; j++)
{
sum[i] = M[j][i] + sum[i];
}
printf("%3d", sum[i]); // printing array sum
}
return 0;
}
我尝试在变量声明和第一个for循环之间插入了一个printf语句,该语句已经输出,因此可能是我的循环出了问题?
如果相关,请参考以下是来自我的Cygwin目录的输出以及在我学校的UNIX目录中应该是什么样子:
0 0 0 0 0 0 0 0 0 0
-1 1 -1 0 0 0 0 0 0 0
0 -2 2 -2 0 0 0 0 0 0
0 0 -3 3 -3 0 0 0 0 0
0 0 0 -4 4 -4 0 0 0 0
0 0 0 0 -5 5 -5 0 0 0
0 0 0 0 0 -6 6 -6 0 0
0 0 0 0 0 0 -7 7 -7 0
0 0 0 0 0 0 0 -8 8 -8
0 0 0 0 0 0 0 0 -9 9
-1 -1 -2 -3 -4 -5 -6 -7 -8 1
int M[10][10] = {0};
改为int M[10][10] = {{0}};
。 - user1969104i : 9
时,执行M[i][j+2] = -i;
会导致越界。该语句意为将-i
赋值给二维数组M
中第i
行、第j+2
列的元素。 - BLUEPIXY