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.