Program Symulacja PKP - Zapisywanie do struktur

0

Witam, na wykładach otrzymalismy zadanie, by stworzyć program symulację rozkładu pkp, który do działania bedzie wykorzystywać plik zewnętrrzny txt, zawierajacy ID;Trase;Typ;GodzPrzyj;CzasPostoju;DocelPeron;

4;WAW-KRK;ex;83.1;6.2;3
6;WRO-KRK;po;24.5;8.4;2
7;LOD-WRO;os;25.0;8.9;1
22;KAT-POZ;ic;21.0;1.9;1

Jestem w fazie początkowej, Moj schemat działania wyglada nastepujaco. Według załozeń, program odczytuje dane z pliku i zapisuje je do zmiennych, a następnie ładuje do struktury, dla kazdego pociągu przypisuje trase,id,god przyj etc.
Później na ekranie ma zostać wyświetlony w trybie tekstowym cos w stylu:

[Nadjezdzajace pociagi]
[oczekujace na ]
[Zwolnienie peronu ]
Wjazd: [Pociag aktualnie wjezdzajacy na stacje]
Peron1: [Pociag znajdujacy sie na peronie I]
Peron2: [Pociag znajdujacy sie na peronie 2]
Peron3: [Pociag znajdujacy sie na peronie 3]
Wyjazd: [Pociag który odzcekał swoj czas w jednostce symulacji]

AKtualnie jestem w fazie układania pliku txt do zmiennych, I jakiejś sensownej alokacji w pamieci (z tym juz jest probem).
Poniżej moje wypociny.

#include <stdio.h>
 
#include <stdio.h>

typedef struct {
	int ID;
	char Pociag[20];
	char Typ[4];
	float Przyjazd;
	float Postoj;
	int Peron;
	} rozklad;
	
 
 
int main()
{
    int i;
    const int max_n= 150;
    const int linie= 5;
    char napis[max_n], *result;
    FILE * fp;
    fp = fopen("txt.txt", "r");
    i=0;
	int ID;
	char Pociag[20];
	char Typ[4];
	float Przyjazd;
	float Postoj;
	int Peron;
	rozklad p[50];
	char* Pociag_wskaznik;
	char* Typ_wskaznik;
	Pociag_wskaznik = p[i].Pociag;
	Typ_wskaznik = p[i].Typ;
//22;KAT-POZ;ic;21.0;1.9;1
	while (feof(fp) == 0 )
		{
		result = fgets (napis, max_n, fp);	
		sscanf(napis,"%d%*[;]%7s;%2s;%4f;%3f%;%d",&ID, Pociag,Typ,&Przyjazd, &Postoj, &Peron);
		p[i].ID = ID;
		Pociag_wskaznik = Pociag;
		Typ_wskaznik = Typ;
		p[i].Przyjazd = Przyjazd;
		p[i].Postoj = Postoj;
		p[i].Peron = Peron;
		if (feof(fp)==0)
		printf ("%d\t%s\tid: %d pociag: %s typ: %s Przyjazd: %3.1f Postoj: %1.1f Peron: %d\n\n",
		i++, napis, p[i].ID, Pociag_wskaznik, Typ_wskaznik, p[i].Przyjazd,p[i].Postoj,p[i].Peron);
		 
		}	
		
	while (1){
		scanf("%d",&i);
		Pociag_wskaznik = p[i].Pociag;
		Typ_wskaznik = p[i].Typ;
		printf("ID: %d Trasa: %s \n", p[i].ID,p[i].Pociag , Typ_wskaznik, p[i].Przyjazd,p[i].Postoj,p[i].Peron);
	}
    fclose(fp);
    char *ii;
	scanf(ii);
    return 0;
}
		
	while (1){
		scanf("%d",&i);
		Pociag_wskaznik = p[i].Pociag;
		Typ_wskaznik = p[i].Typ;
		printf("ID: %d Trasa: %s \n", p[i].ID,p[i].Pociag , Typ_wskaznik, p[i].Przyjazd,p[i].Postoj,p[i].Peron);
	}

Tą część wrzuciłem jako pomoc, do sprawdzenia czy aby na pewno wszystko jest dobrze zapisane do struktury, a tu psikus! Jak zapisać tablice z tekstem do struktury?

1
#include <stdio.h> 
 
typedef struct
  {
   int ID;
   char Pociag[20];
   char Typ[4];
   float Przyjazd;
   float Postoj;
   int Peron;
  } rozklad;

int main()
  {
   int i;
   rozklad p[50];
   FILE * fp;

   fp=fopen("txt.txt", "r");
   for(i=0;fscanf(fp,"%d%*[;]%7s;%2s;%4f;%3f%;%d",&p[i].ID, p[i].Pociag,p[i].Typ,&p[i].Przyjazd, &p[i].Postoj, &p[i].Peron)==6;++i)
     {
      printf ("%d\tid: %d pociag: %s typ: %s Przyjazd: %3.1f Postoj: %1.1f Peron: %d\n\n",
      i, p[i].ID, p[i].Pociag, p[i].Typ, p[i].Przyjazd,p[i].Postoj,p[i].Peron);
     }
   fclose(fp);
   while(1)
     {
      scanf("%d",&i);
      printf("ID: %d Trasa: %s typ: %s Przyjazd: %3.1f Postoj: %1.1f Peron: %d\n", p[i].ID,p[i].Pociag , p[i].Typ, p[i].Przyjazd,p[i].Postoj,p[i].Peron);
     }
   while(getchar()!='\n') {}
   getchar();
   return 0;
  }
0

Ok, dzieki.
Następny problem.

	float czas_symulacji=20.000000;
	while(1){
		printf("Czas: %f\n",czas_symulacji);
	    int n=1;
	    for (i=k-1;i>=0;i--) if (p[i].Przyjazd == czas_symulacji)
	    printf("%d. %d %s %s %f %d \n",n++, p[i].ID, p[i].Pociag, p[i].Typ, p[i].Przyjazd, p[i].Peron);
		czas_symulacji+=0.1;	    
		delay(1);
	    system("cls");
	}	

Jestem zmuszony odgórnie do czasu symulacji co 0.1 jednostki.
Lecz podczas iteracji wkrada się błąd obliczeń. co drugą iteracje wskakuje bład rzedu 0.000001. Jak zaokrąglić liczbę zmiennoprzecinkową cokażdą iteracje do drugiego miejsca po przecinku?
Nie potrzebuję aż takiej dokładności, zależy mi tylko na tym by
Kod C - [rozwiń]
if (p[i].Przyjazd == czas_symulacji)

dawał wartość logiczną 1, p[i].Przyjazd jest wczytaniem z pliku wartości danej (np. 25.6) więc nie może mieć błedu. Poratuje ktoś?

0

Przechodź od razu na liczby całkowite. Wartość wyrażona w jednostkach 0.1

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