#include <stdio.h>
int main(){
int lebar,jumlah,i;
int siswa[lebar];
int x;
printf("Berapa Jumlah Siswa dalam Satu Kelas: ");
scanf("%d",&lebar);
for(i=0;i<lebar;i++){
printf("Masukan Nilai siswa ke-%d: ",i+1);
scanf("%d",&siswa[i]);
jumlah=jumlah+siswa[i];
}
//When I add value to this variable, it starts error
x=20;
printf("Jumlah Nilai total dari %d siswa adalah %d\n",lebar,jumlah);
return 0;
}
程序运行良好,直到我向变量 x 添加值,然后运行程序,它开始出错。终端中的消息是“段错误(核心转储)”
最佳答案
首先,欢迎来到 Stack Overflow。由于这是一个国际社区,如果您的代码是用英语编写的,我们将不胜感激。例如,我可能知道您要做什么,但是使用这样命名的变量就变得很难理解。
其次,让我们看一下您的代码。我假设您正在尝试对用户在长度为 lebar
的数组中输入的所有值求和。 。在代码的第五行,您定义了一个大小为 lebar
的数组。但什么是 lebar
到目前为止?
因此,您有两种选择来解决此问题:
1) 声明lebar
并在创建大小为 lebar
的数组之前为其赋值.
int main(){
int lebar; //I'd call it size...
printf("Size: ");
scanf("%d",&lebar);
int siswa[lebar];
...
}
2) 动态分配大小为 lebar
的数组(您可能需要使用 #include <stdlib.h>
)
int main(){
int lebar; //again, I'd call it size...
int *siswa;
printf("Size: ");
scanf("%d",&lebar);
siswa = malloc(lebar * sizeof(int));
/* rest of your code ... */
}
您已经解决了数组问题。但是看看你的代码,可以看到另一个问题: jumlah
的初始值是多少? ?由于我假设您正在根据代码的第 14 行对所有输入值求和,因此我建议您初始化 jumlah
for
之外循环值为 0。在哪里?好吧,这由你决定。它可以在其声明中
int jumlah = 0;
或者循环之外的某个地方,例如循环之前:
int main()
{
int jumlah;
/* rest of your code ... */
jumlah = 0;
for(i = 0; i<lebar; i++){
/* rest of your code ... */
}
}
关于c - C语言变量加值时出现段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49620373/