我是C的完全初学者,我正在练习将数组传递给函数。我编写了一个程序,将二维数组作为输入,找到各列的总和。 当我编译程序时,我没有错误,但是一旦我运行它,我得到一个对话框,说“untitled5.exe停止工作”,其中untitled5是文件名。 我有这个错误很多次了。我使用了dev c ++和codeblocks来编译我的程序,那么这是什么原因呢?这是我的代码或我的编译器或我的笔记本电脑的问题吗?
#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);
}
}
答案 0 :(得分:0)
在main()
中,您使用i
索引数组的第一个维度。在summation()
中,您使用i
来索引数组的第二维。我认为当summation()
没有填满数组时(例如,当您为行数输入2时),您将超出main()
内第一维的末尾。
我想你想要
summation (arr,5);
而且,在summation()
内:
for (i=0;i<size;i++)
{
s=s+arr[i][j];
}
答案 1 :(得分:0)
#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并使其等于某事之后,我将数组声明移动到了。
然后你的下一个问题是你可能在你的求和函数中超出界限。您的2darray中总是有5列,但您可以拥有不同的行数。将行数n传递给函数求和,以确保不会超出界限。