C语言 将数组传递给函数,file.exe停止工作

p4tfgftt  于 2023-03-01  发布在  其他
关注(0)|答案(2)|浏览(117)

我写了一个程序,把一个二维数组作为输入,求出每一列的和。
当我编译程序的时候,我没有错误,但是一旦我运行它,我会得到一个对话框,上面写着untitled5.exe stopped working,其中untitled5是文件名。
我得到这个错误相当多次。我已经使用了开发C++和代码块来编译我的程序,那么这是什么原因呢?
这是我的代码、编译器还是笔记本电脑的问题?

#include<stdio.h>
void summation(int arr[][5], int size);
int main() {
  int n, arr[n][5], sum, i, j;
  printf("enter the number of rows");
  scanf("%d", & n);
  for (i = 0; i < n; i++) {
    for (j = 0; j < 5; j++) {
      printf("%d,%d th element is", i, j);
      scanf("%d", & arr[i][j]);
    }
  }
  summation(arr, 5);
  return 0;
}
void summation(int arr[][5], int size) {
  int i, j, s = 0;
  for (j = 0; j < 5; j++) {

    for (i = 0; i < 5; i++) {
      s = s + arr[i][j];
    }
    printf("%d", s);
  }

}
b1zrtrql

b1zrtrql1#

main()中,您使用i来索引数组的第一维。在summation()中,您使用i来索引数组的第二维。我认为,当main()没有填满数组的那么多部分时(例如,当您输入2作为行数时),您将超出summation()中第一维的末尾。
我觉得你想

summation (arr,5);

summation()中:

for (i=0;i<size;i++)
{
   s=s+arr[i][j];
}
qojgxg4l

qojgxg4l2#

#include<stdio.h>
void summation (int arr[][5], int size, int rows);
int main()
{
    int n, sum, i, j;
    printf("enter the number of rows");
    scanf("%d",&n);
    int arr[n][5];
    for (i=0;i<n;i++)
    {
        for (j=0;j<5;j++)
    {
        printf("%d,%d th element is",i,j);
        scanf("%d",&arr[i][j]);
    }
    }
    summation (arr, 5, n);
    return 0;
}
void summation (int arr[][5], int size, int rows)
{
    int i,j,s=0;
    for(i=0;i<rows;j++)
    {

        for (j=0;i<size;i++)
        {
            s=s+arr[i][j];
        }
    }
    printf("%d",s);    
}

首先我把数组声明移到,初始化n,并使其等于某个值之后。
接下来你的问题是你的求和函数可能超出了边界,你的二维数组总是有5列,但是你可以有不同的行数,把行数n传递给求和函数,以确保你没有超出边界。

相关问题