Fehler unverständlich



  • Hallo ich bin es nochmal 🙂

    Die zeit, datum fragen haben sich alle klären können und ich habe auch erste erfolge gehabt bis zu diesem punkt..

    sobald die Parkzeit geringer als 1 Stunde ist läuft das programm nicht weiter
    die stelle an der es aufhört ist für mich unerklärlich!
    er stoppt nach einer ausgabe bevor die Zeiten überhaupt verwendet werden?

    die ausgegebenen test zeilen sind nur zur fehlersuche.

    Hier mein Quellcode:

    /*
    ============================================================================
    Name : Parkscheinautomat.c
    Author : Robin Gesell
    Version :
    Copyright : Your copyright notice
    Description : Hello World in C, Ansi-style
    ============================================================================
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void Parkdauer(int Ankunft[],int Oeffnungszeit[],int *Parkzeit)
    {
    	int Parkdauergrenze,Testzeit;
    
    	Parkdauergrenze=Oeffnungszeit[2]-Ankunft[0];
    	Testzeit=Ankunft[0]+1;
    
    	if(Testzeit>Oeffnungszeit[2])
    		Parkzeit[0]=0;
    	//Parkdauer Stunden
    	else
    		Parkzeit[0]=rand()%(0-Parkdauergrenze+1);
    	//Parkdauer Minuten
    	if(Parkzeit[0]==Parkdauergrenze || Parkzeit[0]==0)
    		Parkzeit[1]=rand()%(1-(Oeffnungszeit[3]-1)+1);
    	else
    		Parkzeit[1]=rand()%(1-59+1);
    }
    
    double Geld(int Parkzeitstd,int Parkzeitmin)
    {
    	int i,Stundengeld,Minutengeld=0;
    	double Preis=0;
    	if(Parkzeitmin>0)
    		Minutengeld=1;
    	Stundengeld=Parkzeitstd+Minutengeld;
    	for(i=1;i<=Stundengeld;i++)
    	{
    		if(i==1)
    			Preis+=1.5;
    		else if(i==2 || i==3)
    			Preis+=1.3;
    		else
    			Preis+=1;
    	}
    	return Preis;
    }
    
    void Ausgabe(int Ankunft[],int Datum[],int Ausfahrtszeit[],int Parkzeitstd,int Parkzeitmin,double Preis)
    {
    	//Datum
    	if(Datum[0]<10)
    		printf("\nDatum:		0%d.%d.%d",Datum[0],Datum[1],Datum[2]);
    	else if(Datum[1]<10)
    		printf("\nDatum:		%d.0%d.%d",Datum[0],Datum[1],Datum[2]);
    	else
    		printf("\nDatum:		%d.%d.%d",Datum[0],Datum[1],Datum[2]);
    	//Ankunftszeit
    	if(Ankunft[0]<10)
    		printf("\nEinfahrtszeit:	0%d:%d",Ankunft[0],Ankunft[1]);
    	else if(Ankunft[1]<10)
    		printf("\nEinfahrtszeit:	%d:0%d",Ankunft[0],Ankunft[1]);
    	else
    		printf("\nEinfahrtszeit:	%d:%d",Ankunft[0],Ankunft[1]);
    	//Ausfahrtszeit
    	if(Ausfahrtszeit[0]<10)
    		printf("\nAusfahrtszeit:	0%d:%d",Ausfahrtszeit[0],Ausfahrtszeit[1]);
    	else if (Ausfahrtszeit[1]<10)
    		printf("\nAusfahrtszeit:	%d:0%d",Ausfahrtszeit[0],Ausfahrtszeit[1]);
    	else
    		printf("\nAusfahrtszeit:	%d:%d",Ausfahrtszeit[0],Ausfahrtszeit[1]);
    	//Parkzeit
    	if(Parkzeitstd<10)
    		printf("\nParkzeit:	0%d.%d h",Parkzeitstd,Parkzeitmin);
    	else if (Parkzeitmin<10)
    		printf("\nParkzeit:	%d.0%d h",Parkzeitstd,Parkzeitmin);
    	else
    		printf("\nParkzeit:	%d.%d h",Parkzeitstd,Parkzeitmin);
    	//Preis
    	if(Preis>10)
    		printf("\nParkgebühr:	0%.2f €",Preis);
    	else
    		printf("\nParkgebühr:	%.2f €",Preis);
    }
    
    int main(void)
    {
    	int Oeffnungszeit[4],Ankunft[2],Datum[3],Parkzeitstd,Parkzeitmin,Parkzeit[2],Ausfahrtszeit[2];
    	double Preis;
    	struct tm *Systemdaten;
    
    	//Parkhaus wird geöffnet
    	printf("Wann soll das Parkhaus geoeffnet werden?(Stunde dann Minute!)\n");
    	do
    	{
    		scanf("%d %d",&Oeffnungszeit[0],&Oeffnungszeit[1]);
    		if(Oeffnungszeit[0]<0 || Oeffnungszeit[0]>23 || Oeffnungszeit[1]<0 || Oeffnungszeit[1]>59)
    			printf("Achten sie auf eine realistische Zeiteingabe!(Stunde & Minute neu)\n");
    	}while(Oeffnungszeit[0]<0 || Oeffnungszeit[0]>23 || Oeffnungszeit[1]<0 || Oeffnungszeit[1]>59);
    	//Parkhaus wird geschlossen
    	printf("Wann soll das Parkhaus geschlossen werden?(Stunde dann Minute!)\n");
    	do
    	{
    		scanf("%d %d",&Oeffnungszeit[2],&Oeffnungszeit[3]);
    		if(Oeffnungszeit[2]<0 || Oeffnungszeit[2]>23 || Oeffnungszeit[3]<0 || Oeffnungszeit[3]>59 || Oeffnungszeit[2]<Oeffnungszeit[0] || (Oeffnungszeit[2]==Oeffnungszeit[0]&&Oeffnungszeit[3]<=Oeffnungszeit[1]))
    			printf("Achten sie auf eine realistische Zeiteingabe!(Stunde und Minute neu)\n");
    	}while(Oeffnungszeit[2]<0 || Oeffnungszeit[2]>23 || Oeffnungszeit[3]<0 || Oeffnungszeit[3]>59 || Oeffnungszeit[2]<Oeffnungszeit[0] || (Oeffnungszeit[2]==Oeffnungszeit[0]&&Oeffnungszeit[3]<=Oeffnungszeit[1]));
    
    	if(Oeffnungszeit[0]<10)
    		printf("\nDas Parkhaus wird um 0%d:%d Uhr geoeffnet und um %d:%d Uhr geschlossen.\n",Oeffnungszeit[0],Oeffnungszeit[1],Oeffnungszeit[2],Oeffnungszeit[3]);
    	else if (Oeffnungszeit[1]<10)
    		printf("\nDas Parkhaus wird um %d:0%d Uhr geoeffnet und um %d:%d Uhr geschlossen.\n",Oeffnungszeit[0],Oeffnungszeit[1],Oeffnungszeit[2],Oeffnungszeit[3]);
    	else if (Oeffnungszeit[2]<10)
    		printf("\nDas Parkhaus wird um %d:%d Uhr geoeffnet und um 0%d:%d Uhr geschlossen.\n",Oeffnungszeit[0],Oeffnungszeit[1],Oeffnungszeit[2],Oeffnungszeit[3]);
    	else if (Oeffnungszeit[3]<10)
    		printf("\nDas Parkhaus wird um %d:%d Uhr geoeffnet und um %d:0%d Uhr geschlossen.\n",Oeffnungszeit[0],Oeffnungszeit[1],Oeffnungszeit[2],Oeffnungszeit[3]);
    	else
    		printf("\nDas Parkhaus wird um %d:%d Uhr geoeffnet und um %d:%d Uhr geschlossen.\n",Oeffnungszeit[0],Oeffnungszeit[1],Oeffnungszeit[2],Oeffnungszeit[3]);
    
    	printf("test");
    
    	//Uhrzeit wird eingelesen
    	time_t Zeitabgriff;
    	time(&Zeitabgriff);
    	Systemdaten=localtime(&Zeitabgriff);
    	Ankunft[0]=Systemdaten->tm_hour;
    	Ankunft[1]=Systemdaten->tm_min;
    	Datum[0]=Systemdaten->tm_mday;
    	Datum[1]=Systemdaten->tm_mon+1;
    	Datum[2]=Systemdaten->tm_year+1900;
    
    	printf("test");
    
    	if(Ankunft[0]>Oeffnungszeit[2])
    	{
    		printf("Parkhaus geschlossen!");
    		exit(0);
    	}
    	Parkdauer(Ankunft,Oeffnungszeit,Parkzeit);
    	Parkzeitstd=Parkzeit[0];
    	Parkzeitmin=Parkzeit[1];
    	Ausfahrtszeit[0]=Parkzeitstd+Ankunft[0];
    
    	printf("test");
    
    	if((Parkzeitmin+Ankunft[1])>59)
    	{
    		Ausfahrtszeit[1]=Parkzeitmin+Ankunft[1]-60;
    		Ausfahrtszeit[0]+=1;
    	}
    	else
    		Ausfahrtszeit[1]=Parkzeitmin+Ankunft[1];
    
    	printf("test");
    
    	Preis=Geld(Parkzeitstd,Parkzeitmin);
    
    	Ausgabe(Ankunft,Datum,Ausfahrtszeit,Parkzeitstd,Parkzeitmin,Preis);
    
    return 0;
    }
    

    Außer des Abbruchs wird eine 0 in der Ausgabe, wenn der Wert der Öffnungszeit[3] sprich die Minutenzahl der Schliessungszeit kleiner 10 ist, nicht gedruckt 😕

    Kann mir wer vllt. weiterhelfen? Zu diesen Fehlern habe ich keine erklärung...
    Ich programmiere übrigens in Eclipse Ide (vorgeschrieben)

    Gruß Xtq



  • Beste Möglichkeit: nimm den Debugger

    Zweite Möglichkeit: lass dir was sinnvolleres als "test" ausgeben.
    Ein Zeilenvorschub darin kann auch helfen: "Vor Parkdauer()\n", "Nach Geld()\n" ...
    Besser sogar noch mit den Parametern.

    Wenn du dann weißt wo es klemmt, kannst du dir in der entsprechenden Funktion die berechneten Werte ausgeben lassen und nachsehen ob sie sinnvoll sind.

    Wenn ein Anderer dein Programm debuggen soll, wären ein paar mehr Kommentar nötig.
    Z.B. wozu die Variablen und die Felder bei den Arrays da sind.



  • ok das mit dem debugger teste ich mal.
    was mich verblüfft ist, dass...

    printf("\nDas Parkhaus wird um %d:%d Uhr geoeffnet und um %d:%d Uhr geschlossen.\n",Oeffnungszeit[0],Oeffnungszeit[1],Oeffnungszeit[2],Oeffnungszeit[3]);

    das letzte ist was ausgeführt wird und danach nichtmal das test ausgeben wird.

    und zwischen diesen zwei befehlen passiert nichts



  • Wenn stdout zeilengepuffert ist, wird halt nur jede Zeile gedruckt und nicht jedes Zeichen.
    Darum der Hinweis mit Zeilenvorschub. 😉


Anmelden zum Antworten