从一组6个文件中读取数字到2x3矩阵?

问题描述 投票:0回答:2

我必须使用函数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);
}
c loops matrix scanf
2个回答
1
投票

内部if {}内部的中断只会打破for循环,但是还有另一个while(1)循环不会中断,所以循环只是继续前进和前进。在for循环的开头,你从头开始定义并初始化“i”和“j”,因此它可能是另一个逻辑错误。一个好主意是放置一个调试点,看看它是如何进行的。


0
投票

问题确实是你的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);
}
© www.soinside.com 2019 - 2024. All rights reserved.