我的代码在最近几天出现了很大的问题。虽然scanf()函数在我的程序中看起来效果很好,但是当程序到达某个点时(我扫描浮点数),我只是输入我想要保存在变量min_dist中的值但是当我在其后立即打印时,变量具有完全不同的值,因此整个程序混乱了。我正在使用Code :: Blocks提供的免费编译器 - 这可能是是一个问题?我的朋友在他的电脑中编译相同的程序,没有问题!这是我的代码:
#include <stdio.h>
#include <math.h>
void main() {
int codeA[50],codeB[50],over[2500][2],numA,numB,min_dist;
int i,j,k=0 ;
float xA[50],yA[50],zA[50],xB[50],yB[50],zB[50] ;
double sq_dist,dist ;
printf("Enter the number of spots for company A: \n");
scanf("%d",&numA);
printf("Enter the number of spots for company B: \n");
scanf("%d",&numB);
for (i=0; i<numA; i++) {
printf("Enter code of company A's spot number %d \n",i+1) ;
scanf("%d",&codeA[i]) ;
printf("Enter spot's coordinates: \n");
printf("On axis X: \n") ;
scanf("%f",&xA[i]);
printf("On axis Y: \n");
scanf("%f",&yA[i]);
printf("On axis Z: \n");
scanf("%f",&zA[i]);
}
for (i=0; i<numB; i++) {
printf("Enter code of company B's spot number %d \n",i+1) ;
scanf("%d",&codeB[i]) ;
printf("Enter spot's coordinates: \n");
printf("On axis X: \n") ;
scanf("%f",&xB[i]);
printf("On axis Y: \n");
scanf("%f",&yB[i]);
printf("On axis Z: \n");
scanf("%f",&zB[i]);
}
printf("Enter the minimum distance between 2 spots \n");
****scanf("%d",&min_dist);
printf("%d",min_dist);****
for (i=0; i<numA; i++) {
for (j=0; j<numB; j++) {
sq_dist=(xA[i]-xB[j])*(xA[i]-xB[j]) + (yA[i]-yB[j])*(yA[i]-yB[j]) + (zA[i]-zB[j])*(zA[i]-zB[j]) ;
dist=sqrt(sq_dist);
printf("%f \n",dist);
if (dist<=2) {
over[k][0]=codeA[i];
over[k][1]=codeB[j];
k++ ;
}
}
}
printf("%d, %f \n",k,dist);
printf("These spots collide: \n");
for (i=0; i<k; i++){
printf("code A: %d code B:%d \n",over[i][0],over[i][1]);
}
for (i=0; i<numA; i++) {
for (j=0; j<k; j++) {
if (codeA[i]==over[j][0]) {
codeA[i]=0 ;
xA[i]=0;
yA[i]=0;
zA[i]=0;
continue ;
}
}
}
for (i=0; i<numB; i++) {
for (j=0; j<k; j++) {
if (codeB[i]==over[j][1]) {
codeB[i]=0 ;
xB[i]=0;
yB[i]=0;
zB[i]=0;
continue ;
}
}
}
for (i=0; i<numA; i++) {
if (codeA[i]!=0) {
printf("Remaining company A's spot code %d \n",codeA[i]) ;
printf("Coordinates x,y,z: \n %f,%f,%f \n",xA[i],yA[i],zA[i]) ;
}
}
for (i=0; i<numB; i++) {
if (codeB[i]!=0) {
printf("Remaining company B's spot code %d \n",codeB[i]) ;
printf("Coordinates x,y,z: \n %f,%f,%f \n",xB[i],yB[i],zB[i]) ;
}
}
}
实际上,根据我输入的内容,我会得到不同的错误结果。例如:当我键入2时,作为最小距离,数字21.715021直接打印。如果我输入10,则直接打印101.705021(或类似的东西 - 不能完全记住)。如果我将min_dist声明为float,像1.025846e-210之类的数字会直接打印出来。
我突出了问题发生的程序点。我是c的新手,也不是母语为英语的人,所以请原谅我的语法/语法错误。
答案 0 :(得分:0)
您提到在min_dist
中读取一个浮点数,但调用是:
scanf("%d",&min_dist);
这是试图读取min_dist
中的积分。您的意思是使用%f
吗?