-5 c
#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;
}
Run Code Online (Sandbox Code Playgroud)
程序运行良好,直到我向变量x添加值然后运行程序,它开始出错.终端中的消息是"Segmentation fault(core dumped)"
首先,欢迎使用Stack Overflow.由于它是一个国际社区,如果您的代码是用英语编写的,我们将不胜感激.例如,我可能知道你正在尝试做什么,但是使用这样的变量变得难以理解.
其次,我们来看看你的代码.我假设你试图将用户在长度数组中输入的所有值相加lebar.在代码的第5行,您定义了一个大小的数组,lebar但lebar到目前为止是什么?
因此,您有两种方法可以解决此问题:
1)lebar在创建大小数组之前声明并为其赋值lebar.
int main(){
int lebar; //I'd call it size...
printf("Size: ");
scanf("%d",&lebar);
int siswa[lebar];
...
}
Run Code Online (Sandbox Code Playgroud)
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 ... */
}
Run Code Online (Sandbox Code Playgroud)
你解决了阵列问题.但是看看你的代码,可以看到另一个问题:什么是初始值jumlah?由于我假设您根据代码的第14行对所有输入值求和,我建议您使用值0 初始化jumlahOUTSIDE for循环.在哪里?嗯,这取决于你自己决定.它可以是它的声明
int jumlah = 0;
Run Code Online (Sandbox Code Playgroud)
或者在循环之外的某个地方,例如在循环之前:
int main()
{
int jumlah;
/* rest of your code ... */
jumlah = 0;
for(i = 0; i<lebar; i++){
/* rest of your code ... */
}
}
Run Code Online (Sandbox Code Playgroud)