2017-12-26 11 views
0

함수 dist (double p [2] [3])를 사용하여 각 점을 3 개의 좌표로 정의한 두 쌍의 점 사이의 거리를 찾아야합니다. 파일에 총 12 개의 좌표를 공백으로 구분하여 넣습니다. {}는 단지 for- 나누기 경우6 개 세트의 파일에서 숫자를 2x3 매트릭스로 읽으시겠습니까?

#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); 
} 
+0

이 파일의 경로는 무엇입니까? 제발 그 작은 부분을 제공해 줄 수 있니? –

+0

예! 이것은 단지 텍스트 파일입니다. 2.0 4.0 7.0 1.5 6.7 9.1 2.0 4.0 7.0 1.5 6.7 9.1 –

답변

1

에게 ... 내부 내부의 휴식을 I는 다음과 같이 그 일을 시도하지만 루프는 그냥 반복 처음 두 점 사이의 거리를 인쇄 유지, 나누기 결코 루프하지만, while (1) 루프는 중단되지 않으므로 루프가 계속 진행됩니다. for-loop의 처음에는 "i"와 "j"를 처음부터 정의하고 초기화하므로 다른 논리적 실수가 될 수 있습니다. 디버그 지점을 배치하고 디버그 지점을 확인하는 것이 좋습니다.

+0

i와 j는 처음부터 정의해야합니다. –

+0

알 수 있습니다! 정말 고맙습니다!! –

+0

@ 브루노 브라가 (BruunoBraga)는 처음에 정의 될 수 있고 나중에 사용될 수 있습니다. 그런 식으로 두 번 이상 초기화되지 않습니다. 어느 쪽이든, 그것은 해결됩니다. –

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); 
} 
+0

예, 문제가 있습니다. 감사합니다, 나는 플래그 변수를 사용하는 것에 대해 생각하지 않았습니다! –

관련 문제