【问题标题】:Reading numbers from a file in sets of 6 into a 2x3 matrix?以 6 组为一组将文件中的数字读入 2x3 矩阵?
【发布时间】:2017-12-26 12:20:02
【问题描述】:

我必须使用函数 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);
}

【问题讨论】:

  • 这个文件怎么样?你能提供一小部分吗?
  • 当然!它只是一个文本文件,就像这样。 2.0 4.0 7.0 1.5 6.7 9.1 2.0 4.0 7.0 1.5 6.7 9.1

标签: c loops matrix scanf


【解决方案1】:

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

【讨论】:

  • i 和 j 必须从头开始定义
  • 知道了!非常感谢!!
  • @BrunoBraga,它们可以在开始时定义并在以后使用,这样它们就不会被多次初始化。无论哪种方式,它都解决了。
【解决方案2】:

问题确实是你的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);
}

【讨论】:

  • 是的,这就是问题所在!谢谢,我没有考虑过使用标志变量!
猜你喜欢
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多