我必须使用函数dist(double p [2] [3])找到两对点之间的距离,每个点由三个坐标定义。我将总共12个坐标放在一个文件中,用空格分隔。我尝试这样做,但循环永远不会打破,它只是一遍又一遍地打印前两点之间的距离......
#include <stdio.h>
#include <math.h>
double dist(double p[2][3])
{
double distance=sqrt(((p[0][0]-p[1][0])*(p[0][0]-p[1][0]))+((p[0][1]-p[1][1])*(p[0][1]-p[1][1]))+((p[0][2]-p[1][2])*(p[0][2]-p[1][2])));
return distance;
}
int main()
{
double p[2][3];
FILE*in;
in=fopen("file","r");
while(1)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
if(fscanf(in, "%lf ", &p[i][j])==EOF)
{break;}
}
}
printf("the distance is %lf\n", dist(p));
}
fclose(in);
}
内部if {}内部的中断只会打破for循环,但是还有另一个while(1)循环不会中断,所以循环只是继续前进和前进。在for循环的开头,你从头开始定义并初始化“i”和“j”,因此它可能是另一个逻辑错误。一个好主意是放置一个调试点,看看它是如何进行的。
问题确实是你的while循环,break语句只是打破内部for循环,检查这个解决方案。
#include <stdio.h>
#include <math.h>
double dist(double p[2][3])
{
double distance=((p[0][0]-p[1][0])*(p[0][0]-p[1][0]))+((p[0][1]-p[1][1])*(p[0][1]-p[1][1]))+((p[0][2]-p[1][2])*(p[0][2]-p[1][2]));
return distance;
}
int main()
{
double p[2][3];
FILE*in;
in=fopen("file","r");
int flag = 1;
while(flag > 0)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
if(fscanf(in, "%lf ", &p[i][j])==EOF)
{flag = 0;}
}
}
printf("the distance is %lf\n", dist(p));
}
fclose(in);
}