我花了 3 个小时才找到解决问题的逻辑并编写相应的代码。但现在我是
出现此运行时错误。谁能帮助我知道我犯了什么错误? 编辑:它现在正在运行,但不打印任何内容。
#include <stdio.h>
#include<math.h>
float distance(float n1,float m1,float n2,float m2){
float d=0;float sum=0;
d =sqrt(pow(m2-m1,2)+pow(n2-n1,2));
sum+=d;
printf("%.2f",sum);
return sum;
}
int main(void) {
int t,n,i,j;float sum=0;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int r=0,s=0,a=0,b=0;
int x[n],y[n],p[n],q[n],min[n],max[n];
for(i=0;i<n;i++){
scanf("%d %d",&x[i],&y[i]);}
for(j=0;j<10001;j++){
for(i=0;i<n;i++){
if(j==x[i]){
p[r++]=x[i];q[s++]=y[i];
}
}}
for(i=0,j=i+1;i<n,j<n;i++,j++){
if(p[i]==p[j]){
if(q[i]>q[j]){min[a++]=p[i]; max[b++]=q[i];}
else{min[a++]=p[i]; max[b++]=q[j];}
}
else{min[a++]=p[i]; max[b++]=q[i];}
}
for(i=0;i<n;i++){
distance(min[i],max[i],min[i+1],max[i+1]);
}
}
}
最佳答案
正如 @YePhicK 所说,我会强调,学习使用调试器。 不要依赖猜测或仅仅依靠目测。
也就是说,我看到一些东西,除非你真的知道自己在做什么,否则肯定会崩溃。
您有一个使用 j
作为索引变量的循环。
然后在其中,您有另一个循环,它也使用 j
作为索引变量。
for(j=0;j<10001;j++){ // <----- j used here
for(i=0;i<n;i++){
if(j==x[i]){
p[r++]=x[i];q[s++]=y[i];
}
}
for(i=0,j=i+1;i<n,j<n;i++,j++){ // <----- j used here
if(p[i]==p[j]){
if(q[i]>q[j]){min[a++]=p[i]; max[a++]=q[i];}
else{min[a++]=p[i]; max[a++]=q[j];}
}
else{min[a++]=p[i]; max[a++]=q[i];}
}
}
此外,您正在使用名为 min
和 max
的数组。
有一些普遍接受的宏,称为 min
和 max
,因此,如果您重新定义这些宏,则会面临名称冲突的风险。
另外,在这样的代码中
{
min[a++]=p[i];
max[a++]=q[i];
}
看起来您通过将 a
递增两次来将空格放入数组 min
和 max
中。
关于c - 为什么我的代码出现运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462653/