#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;
}
我的程序中是否有错误? 每次我运行程序,在输入第一个学生的标记后,我收到错误,说我的程序已停止工作! 对于我使用数组的大部分程序都会发生这种情况!
答案 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
需要一个指针,而不是值。