Wątek przeniesiony 2014-01-13 19:15 z C/C++ przez ŁF.

Program wczytujący z pliku "nieskończenie" wiele linijek

0

Witam!
Mam do napisania program wczytujący dane współrzędne geograficzne(ściślej geodezyjne) z pliku i zamieniający je na xyz i zapisujący w nowym pliku.
Z jedną linijką nie ma problemu, natomiast ja potrzebuję "nieskończenie" wiele linijek ,gdy napisałem pętlę coś się wysypalo i nie wiem co. Program niby coś liczy, pierwsze współrzedne są policzone dobrze i dobrze zapisane, ale dalej sprawa się komplikuje bo ani dobrze nie liczy ani nie zapisuje tak jak powinien. Dane podane jako Nr, B, L, H
. Kolega powiedział ze trzeba użyć funkcji read line by line tylko problem w tym że nie wiem jak.
Pomożecie?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

       FILE *fp, *fp1;
       double B, L, h, a, x, y, z, Brad, Lrad, pi=(3.14159265), N, e2 ;  
       int nr=1, eli;
       
       
       /*Wybór elipsoidy*/
       printf("Wybierz elipsoidę \n");
       printf("1. GRS80 \n");
       printf("2. Elipsoida Bessel'a \n");
       printf("3. Elipsoida Krasowskiego \n");
       scanf("%d", &eli);
       
       /*Instrukcja wyboru*/
       if (eli==1) {a=6378137, e2=0.00669438000229;} 
       else { if (eli==2) {a=6377397, e2=0.006674312326;} 
       else { if (eli==3) {a=6378245, e2=0.00669342162297;} 
       else {printf("Uruchom program jeszcze raz \n");
       }}};
       
       /*Otworzenie pliku*/
       fp=fopen("dane.txt", "r");
       
       /*if ((fp = fopen(const char *dane.txt, "r")) == NULL) {  obsluz blad otwarcia pliku ; }*/
       /*pętla*/
       while((fp, "%d %lf %lf %lf", &nr, &B, &L, &h) != EOF)
        {
            fscanf(fp, "%d %lf %lf %lf", &nr, &B, &L, &h) ;
            printf("%d %lf %lf %lf\n", &nr, &B, &L, &h);
        }
       //system("PAUSE");
return 0;
       
       while (fscanf(fp, "%d %lf %lf %lf",  &nr, &B, &L, &h) != EOF)
       {
              fprintf(fp, "%d %lf %lf %lf\n",  &nr, &B, &L, &h);
        //}
     
       //fscanf(fp, "%d %lf %lf %lf", &nr, &B, &L, &h);
       //fclose(fp);
       
       /*GRS80
       a=6378137;
       e2=0.0066943800229;*/
       
       /*Bessel
       a=6377397
       e2=0.006674312326*/
       
       /*Krasowski
       a=6378245
       e2=0.00669342162297*/
       
       /*Zamiana na radiany*/
       Brad=B*pi/180;    
       Lrad=L*pi/180;
       
       /*Lczenie N*/
       N=(a/(sqrt(1-e2*(sin(Brad))*(sin(Brad)))));    
       
       /*Przeliczenie wspolrzednych*/
       x=(N+h)*(cos(Brad))*(cos(Lrad));     
       y=(N+h)*(cos(Brad))*(sin(Lrad));
       z=((1-e2)*N+h)*(sin(Brad));
       
       /*Wypisanie wspolrzednych*/
       printf ("x= %lf\n", x);    
       printf ("y= %lf\n", y);
       printf ("z= %lf\n", z);
       printf ("N= %lf\n", N);
       //pause;
       system("PAUSE");
   
          /*Zapisywanie do pliku*/
       fp1 = fopen("xyz.txt", "a");
       fprintf(fp1, "%d %lf %lf %lf", nr, x, y, z);
       fprintf(fp1, "\n");
       fprintf(fp1, "\n");
       fprintf(fp1, "\n");
       fclose(fp1);
    }
    fclose(fp);
   return 0;
}
0

Nie napisałeś zaś bezmyślnie skradłeś.

while(fscanf(fp, "%d %lf %lf %lf", &nr, &B, &L, &h)==4) printf("%d %lf %lf %lf\n", &nr, &B, &L, &h);
0

D'oh!

       if (eli==1) {a=6378137, e2=0.00669438000229;} 
       else { if (eli==2) {a=6377397, e2=0.006674312326;} 
       else { if (eli==3) {a=6378245, e2=0.00669342162297;} 
       else {printf("Uruchom program jeszcze raz \n");
       }}};
0

Kombinuję jak mogę, cóż może się zasugerowałem twoim wpisem ale posądzanie mnie o kradzież jest nietaktowne. Pomożecie czy będziecie mi wynajdywac kolejne amatorskie błędy? Jak kiedyś pisałem nie jestem zaawansowanym programistą, ale z przymusu musze się nauczyć tego języka tak czy inaczej.

0

Musisz (niestety samodzielnie) nauczyć się tego języka przynajmniej na tyle by zauważyć kiedy dostajesz pomoc. Jak czegoś nie rozumiesz to wystarczy spytać.

0

Aha, że 4? Myślałem że tylko skopiowałeś tę linijkę żeby pokazać jak to źle zrobiłem "kopiując" twoją koncepcję. Jak to spoko, ale już sobie poradziłem program działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1