为什么这个c程序会给出运行时错误

时间:2015-02-03 08:31:24

标签: c

我的程序是输入整数并将奇数负数的总和加到偶数正数但我得到运行时错误,任何人都可以找到错误。

#include <stdio.h>

int main(void)
 {

int i,j,m,n,a[m],w;

    scanf("%d",&n);
    for(i=0;i<n;i++)
    {   int s=0,d=0;
        scanf("%d",&m);
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[j]);  
            if((a[j]<0)&&(a[j]%2!=0))
             s=s+a[j];
        else if((a[j]>0)&&(a[j]%2==0))
        d=d+a[j];
        }
        printf("%d",s+d);
            }
    return 0;
}

4 个答案:

答案 0 :(得分:6)

代码

a[m]

是错误的。 m的值用作未初始化。

要解决您的问题,您可以根据int * a的用户输入为变量m使用动态内存分配。

注意:

  1. 始终初始化您的本地变量。
  2. 检查scanf()的返回值是否成功输入。
  3. [请求] C忽略[大多数]空格。使用它们可以使您的代码更加人类可读

答案 1 :(得分:1)

你的错误是这样的: int a[m]

您期望m的价值是多少?更改为a[256]。或者在扫描int *a之后定义ma = malloc( m * sizeof (int) )

答案 2 :(得分:1)

如果你想要

a[m];

从C99你有VLA

int m;
scanf("%d",&m);
int a[m];

因为我在你的代码中看到你正在尝试扫描数组的大小。

或者你可以有一个动态数组

int *a = malloc(sizeof(int) * m);

@Sourav 已经提到了崩溃的原因。

m的值不确定。

答案 3 :(得分:0)

数组声明导致运行时错误请参考此http://www.tutorialspoint.com/cprogramming/c_arrays.htm