您好,您可以理解C at C。我得到了第26-31行的细分故障。我提到了Falut从下面开始的代码开始的位置。IM在此在线C编译器中收到错误消息,并且代码块也说任何仅仅是.exe文件正在停止。但是此代码在DEVC 中完美工作。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int terim,s,z;
int deger[terim][2];
float alt_limit;
float ust_limit;
float toplam;
float cikarma;
printf("Denkleminizde kac adet terim var?n");
scanf("%d",&terim);
//#################
for(s=0; s<terim; s++){ //----- segmentation fault begins
printf("Lutfen %d. terimin katsayisini giriniz : ",s+1);
scanf("%d",°er[s][0]);
printf("Lutfen %d. terimin us degerini giriniz:",s+1);
scanf("%d",°er[s][1]);
} //----- segmentation fault ends
printf("nLutfen alt limit degerini girinizn>>: ");
scanf("%f",&alt_limit);
printf("nLutfen ust limit degerini girinizn>>: ");
scanf("%f",&ust_limit);
cikarma = ust_limit - alt_limit;
toplam = ust_limit + alt_limit;
int tercih;
printf("n [ 1 ] Rectangle Yontemi n");
printf("n [ 2 ] Midpoint Yontemi n");
printf("n [ 3 ] Trapezoid Yontemi n");
printf("n [ 4 ] Simpsons Yontemi n");
printf("Lutfen tercih ettiginiz yontemin numarasini tuslayinizn");
scanf("%d",&tercih);
float a_tabaninda , b_tabaninda , tplm_yarisi;
float rec_sonuc,mid_sonuc;
float trap_sonuc,simp_sonuc;
a_tabaninda = pow(alt_limit,deger[z][1]);
b_tabaninda = pow(ust_limit,deger[z][1]);
tplm_yarisi = pow((alt_limit + ust_limit)/2,deger[z][1]);
float zrec,zmid,ztrap,zsimp;
switch(tercih){
case 1:
for(z=0; z<terim ;z++){
rec_sonuc += ((deger[z][0])*pow(alt_limit,deger[z][1]));
}
zrec = (cikarma * rec_sonuc);
printf("%.4f",fabs(zrec));
break;
case 2:
for(z=0;z<terim;z++){
mid_sonuc += ((deger[z][0]*pow((alt_limit + ust_limit)/2,deger[z][1])));
}
zmid = (cikarma * mid_sonuc);
printf("%.4f",fabs(zmid));
break;
case 3:
for(z=0;z<terim;z++){
trap_sonuc += (((deger[z][0]*pow(alt_limit,deger[z][1]))+(deger[z][0]*pow(ust_limit,deger[z][1])))/2);
}
ztrap = (cikarma * trap_sonuc);
printf("%.4f",fabs(ztrap));
break;
case 4:
for(z=0;z<terim;z++){
simp_sonuc += (deger[z][0]*pow(alt_limit,deger[z][1])) + 4*(deger[z][0]*pow((alt_limit + ust_limit)/2,deger[z][1])) + (deger[z][0]*pow(ust_limit,deger[z][1])) ;
}
printf("%.4f",fabs(cikarma/6*simp_sonuc));
break;
default:
printf("Lutfen gecerli bir numara giriniz!n");
}
return 0;
}
感谢您的帮助...
我刚刚复制了您的代码并进行了编译并在您描述的情况下获取分段错误。
i然后初始化 terim 的初始值为100并再次编译。然后,您的程序在没有分段故障的情况下运行,如果您将SCANF扫描到 terim 。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int terim = 100,s,z; /* Initialise here */
int deger[terim][2];
这是我运行程序时从您的程序中获得的输出...
Denkleminizde kac adet terim var?
2
Lutfen 1. terimin katsayisini giriniz : 1
Lutfen 1. terimin us degerini giriniz:2
Lutfen 2. terimin katsayisini giriniz : 3
Lutfen 2. terimin us degerini giriniz:4
Lutfen alt limit degerini giriniz
>>: 5
Lutfen ust limit degerini giriniz
>>: 6
[ 1 ] Rectangle Yontemi
[ 2 ] Midpoint Yontemi
[ 3 ] Trapezoid Yontemi
[ 4 ] Simpsons Yontemi
Lutfen tercih ettiginiz yontemin numarasini tuslayiniz
1
1900.0000
我不是在评论您的代码是否结构良好,或者其他。我专注于您为什么会遇到细分错误。
希望这会有所帮助。
我刚刚解决。我正在定义
int deger [terim] [2];
此行之后:
scanf("%d",&amp; terim(;
不知道为什么,但是该代码在不同的操作系统和不同类型的编译器中的作用有所不同。但是有了这个解决方案,它的效果很好。
谢谢大家:)