我的program.exe已停止工作

时间:2016-04-28 14:55:53

标签: c

#include <stdio.h>
#include <conio.h>

int main(void){
    int n, i, a[10], sum = 0;
    for(i = 0; i < 10; i++){
        printf("Enter the marks of %dth student ", i + 1);
        scanf("%d", a[i]);
        sum = sum + a[i];
    }
    printf("The total sum is %d", sum);
    return 0;
}

我的程序中是否有错误? 每次我运行程序,在输入第一个学生的标记后,我收到错误,说我的程序已停止工作! 对于我使用数组的大部分程序都会发生这种情况!

3 个答案:

答案 0 :(得分:5)

应该是

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

传递指针,而不是值。不幸的是,一些编译器无法对scanf()的调用执行编译时类型安全检查。所以基本上scanf()将你的(未初始化的值)a[i]视为一个指针,这会导致未定义的行为。

答案 1 :(得分:2)

您通过将具有错误类型的数据传递到scanf()来调用未定义的行为。对于int*,您必须将scanf()传递给int,而不是%d

我还更正了#include并添加了输入错误检查。 试试这个:

#include<stdio.h>
int main(void){
    int n,i,a[10],sum=0;
    for(i=0;i<10;i++){
        printf("Enter the marks of %dth student ",i+1);
        if(scanf("%d",&a[i])!=1){
            fputs("read error\n",stdout);
            return 1;
        }
        sum=sum+a[i];
    }
    printf("The total sum is %d\n",sum);
    return 0;
}

答案 2 :(得分:2)

试试这个:

#include <stdio.h> //stdio not Stdio

int main(void){
    int n,i,a[10],sum=0;
    for(i=0;i<10;i++){
        printf("Enter the marks of %dth student ",i+1);
        scanf("%d",&a[i]); // &a[i] not a[i]
        sum=sum+a[i];
    }
    printf("The total sum is %d\n",sum);
    return 0;
}

scanf需要一个指针,而不是值。