Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中多数组的输入_C_Arrays_Input_Scanf - Fatal编程技术网

C语言中多数组的输入

C语言中多数组的输入,c,arrays,input,scanf,C,Arrays,Input,Scanf,我试图将用户输入分配到数组中;然而,下面的程序只拾取每行输入中的第一个元素。这个程序的最终目标是求整数的对角和并返回其差的绝对值 输入示例(请注意,第一个数字给出了行数和列数(方形数组): 输入: 三, 11 2 4 4 5 6 10 8-12 输出: 期望值=15 实际值=10 我意识到问题在于数组的设置方式。如果我打印出数组,我会得到:111555999 如有任何提示/帮助,将不胜感激 int main() { int n, i, c, multi_array[200][200],

我试图将用户输入分配到数组中;然而,下面的程序只拾取每行输入中的第一个元素。这个程序的最终目标是求整数的对角和并返回其差的绝对值

输入示例(请注意,第一个数字给出了行数和列数(方形数组):

输入: 三,

11 2 4

4 5 6

10 8-12

输出: 期望值=15 实际值=10

我意识到问题在于数组的设置方式。如果我打印出数组,我会得到:111555999

如有任何提示/帮助,将不胜感激

int main() {
    int n, i, c, multi_array[200][200], sum1 = 0, sum2 = 0;

    scanf("%i", &n);   //N = number of rows and number of columns (square 2D array)

    for (i = 0; i < n; i++) {
        for (c = 0; c < n; c++) {
            scanf("%d ", &multi_array[c][i]);   //enter integers to store in array
        }
    }

    for (i = 0; i != n; i++) {
        sum1 += multi_array[i][i];    //add up top left to bottom right diagonal
    }

    for (i = 0; i != n; i++) {
        sum2 += multi_array[i][n-i];    //add up top right to bottom left diagonal
    }
    printf("%i", abs(sum1 - sum2));    //print absolute value of the difference between diagonals
    return 0;
}
intmain(){
int n,i,c,multi_数组[200][200],sum1=0,sum2=0;
scanf(“%i”,&n);//n=行数和列数(二维正方形数组)
对于(i=0;i
你显然是越界了:

   for (i = 0; i != n; i++) {
        sum2 += multi_array[i][n-i];    //add up top right to bottom left diagonal
    }
i
等于0时,表达式
n-i
将等于
n
,但数组的范围是从0到n-1。代码将读取未初始化的值并导致未定义的行为


第二个数组索引应该小于1。

您的主要问题是这里,您超出了界限:

for (i = 0; i != n; i++) {
  sum2 += multi_array[i][n - i]; // when i is 0, th
}
当i=0时,您正在访问multi_数组[0][3],当N=3时,这超出了界限

因此,将其更改为:

multi_array[i][n - i - 1]

您应该这样读取阵列:

for (i = 0; i < n; i++) {
  for (c = 0; c < n; c++) {
    scanf(" %d ", &multi_array[i][c]);
  }
}
输出:

3
11 2 4
4 5 6
10 8 -12
|11||2||4|
|4||5||6|
|10||8||-12|
sum1 is 4
sum2 is 19
15

请缩进您的代码。所以您的问题是如何读取2D数组,对吗?它应该是
scanf(“%d”、&multi_数组[i][c])
相反。@LuizEduardoF.有一点。这样你可以按列的主要顺序阅读。这是你想要的吗?但这不是唯一的问题…你的索引计算错误,因为第二条对角线是错误的。将
sum2+=multi_array[i][n-i];
更改为
sum2+=multi_array[i][n-i-1]是的,C++的关键字,我看到你的答案,但是你删除了它,所以我不能评论你说的是正确的。所以我发布了我的。然后你没有删除它。但是,现在我已经扩展了我的答案,所以我不会删除它,我希望你知道为什么!1先去那里。@总的来说,答案重复并不好。未来的读者希望快速看到他需要看到的东西,而不是重复阅读。如果不是因为我的答案一直在扩展,我会把它删除。很高兴你没有弄错。非常感谢你的帮助!这是我第二次遇到小问题ew到C和堆栈溢出。这里的帮助已经非常大了。再次感谢你。@JoeyGrant如果你待得这么好,它会对你很好。很高兴我帮了你!
#include <stdio.h>
#include <stdlib.h>     /* abs */

int main() {
    int n, i, c, multi_array[200][200], sum1 = 0, sum2 = 0;

    scanf("%d", &n);

    for (i = 0; i < n; i++) {
        for (c = 0; c < n; c++) {
            scanf("%d", &multi_array[i][c]);
        }
    }

    for (i = 0; i < n; i++) {
        for (c = 0; c < n; c++) {
            printf("|%d|", multi_array[i][c]);
        }
        printf("\n");
    }

    for (i = 0; i != n; i++) {
        sum1 += multi_array[i][i];
    }
    printf("sum1 is %d\n", sum1);

    for (i = 0; i != n; i++) {
        sum2 += multi_array[i][n - i - 1];
    }
    printf("sum2 is %d\n", sum2);

    printf("%i", abs(sum1 - sum2));
    return 0;
}
3
11 2 4
4 5 6
10 8 -12
|11||2||4|
|4||5||6|
|10||8||-12|
sum1 is 4
sum2 is 19
15