C Programm startet nicht in CodeBlocks

#1
Hallo zusammen,

irgendwie startet mein C Programm nicht bei CodeBlocks. Der Code ist unten. Wisst ihr woran es liegt ?

C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main(int argc, char *argv[])
{
    int x=0;                        //Zählvariable
    int MinStunden=atof(argv[1]);   //zur Speicherung der Öffnungszeiten
    int MinMinuten=atof(argv[2]);   //zur Speicherung der Öffnungszeiten
    int MaxStunden=atof(argv[3]);   //zur Speicherung der Öffnungszeiten
    int MaxMinuten=atof(argv[4]);   //zur Speicherung der Öffnungszeiten
    int Jahr=0;                     //Speichert das aktuelle Jahr
    int Monat=0;                    //Speichert den aktuellen Monat
    int Tag=0;                      //Speichert den aktuellen Tag
    int Stunde=0;                   //Speichert die aktuelle Stunde
    int Minute=0;                   //Speichert die aktuelle Minute
    int DauerStunde=0;              //zur Speicherung der Parkdeuer
    int DauerMinute=0;              //zur Speicherung der Parkdeuer
    int Zufallszahl=0;              //zur Speicherung einer generierten Zufallszahl
    int AusfahrtStunde=0;           //zur Speicherung der Ausfahrtszeit
    int AusfahrtMinute=0;           //zur Speicherung der Ausfahrtszeit

    //Überprüfung der Übergabeparameter (Öffnungszeiten
    if((MaxStunden>=24)||(MaxStunden<0)){
        printf("\nFehler in den Öffnungszeiten!\n");
        return -1;
    }
    if((MaxMinuten>=60)||(MaxMinuten<0)){
        printf("\nFehler in den Öffnungszeiten!\n");
        return -1;
    }
    if((MinStunden>=24)||(MinStunden<0)){
        printf("\nFehler in den Öffnungszeiten!\n");
        return -1;
    }
    if((MinMinuten>=60)||(MinMinuten<0)){
        printf("\nFehler in den Öffnungszeiten!\n");
        return -1;
    }

    //Abfragen der aktuellen System-Uhrzeit
    struct tm *tmnow;
    time_t tnow;
    tnow=time(NULL);
    tmnow=localtime(&tnow);
    Jahr=tmnow->tm_year+1900;
    Monat=tmnow->tm_mon+1;
    Tag=tmnow->tm_mday;
    Stunde=tmnow->tm_hour;
    Minute=tmnow->tm_min;

    //Überprüfen der 'Einfahrtszeit'
    if(Stunde<=MinStunden){
        if(Stunde<MinStunden){
            printf("\nParkhaus ist noch nicht geöffnet!\nÖffnungszeiten: %02d:%02d Uhr bis %02d:%02d Uhr\n",MinStunden,MinMinuten,MaxStunden,MaxMinuten);
            return -1;
        }
        if(Stunde==MinStunden){
            if(Minute<MinMinuten){
                printf("\nParkhaus ist noch nicht geöffnet!\nÖffnungszeiten: %02d:%02d Uhr bis %02d:%02d Uhr\n",MinStunden,MinMinuten,MaxStunden,MaxMinuten);
                return -1;
            }
        }
    }
    if(Stunde>=MaxStunden){
        if(Stunde>MaxStunden){
            printf("\nParkhaus ist noch nicht geöffnet!\nÖffnungszeiten: %02d:%02d Uhr bis %02d:%02d Uhr\n",MinStunden,MinMinuten,MaxStunden,MaxMinuten);
            return -1;
        }
        if(Stunde==MaxStunden){
            if(Minute>MaxMinuten){
                printf("\nParkhaus ist noch nicht geöffnet!\nÖffnungszeiten: %02d:%02d Uhr bis %02d:%02d Uhr\n",MinStunden,MinMinuten,MaxStunden,MaxMinuten);
                return -1;
            }
        }
    }

    //Überprüfen ob Parkhaus gerade schließt
    if((Stunde==MaxStunden)&&(Minute==MaxMinuten)){
        printf("\nEinfahrt nicht mehr möglich!\n");
        return -1;
    }

    int Maximum=MaxStunden-Stunde;  //Speichert ein Maximum für Zufallsgeneration

    //Schleife zur Generiereung einer zulääsigen Parkdauer
    while(x==0){
        if(Maximum==0){DauerStunde=0;}
        else{
            srand(time(NULL));
            Zufallszahl=rand() % Maximum + 0;
            DauerStunde=Zufallszahl;
        }
        if(DauerStunde!=0){
            srand(time(NULL));
            Zufallszahl=rand() % 60 + 0;
            DauerMinute=Zufallszahl;
        }else{
            Maximum=MaxMinuten-Minute;
            srand(time(NULL));
            Zufallszahl=rand() % Maximum + 0;
            DauerMinute=Zufallszahl;
        }
        x++;

        if((DauerStunde==0)&&(DauerMinute==0)){
            x=0;
        }
        AusfahrtMinute=Minute+DauerMinute;
        AusfahrtStunde=Stunde+DauerStunde;
        if(AusfahrtMinute>=60){
            AusfahrtStunde=AusfahrtStunde+1;AusfahrtMinute=AusfahrtMinute-60;
        }
        if(AusfahrtStunde>MaxStunden){
            x=0;
        }
        if(AusfahrtStunde==MaxStunden){
            if(AusfahrtMinute>MaxMinuten){
                x=0;
            }
        }
    }

    //Berechnen der Gebühren für die Parkdauer
    double Gebuehren=1.5;
    if((DauerStunde==1)&&(DauerMinute==0)){
        Gebuehren=1.5;
    }
    if((DauerStunde==1)&&(DauerMinute>0)){
        Gebuehren=Gebuehren+1.3;
    }
    if((DauerStunde==2)&&(DauerMinute==0)){
        Gebuehren=Gebuehren+1.3;
    }
    if((DauerStunde==2)&&(DauerMinute>0)){
        Gebuehren=Gebuehren+2.6;
    }
    if((DauerStunde>=3)&&(DauerMinute==0)){
        Gebuehren=Gebuehren+2.6+(DauerStunde-3);
    }
    if((DauerStunde>=3)&&(DauerMinute>0)){
        Gebuehren=Gebuehren+3.6+(DauerStunde-3);
    }

    double Betrag=0;    //Speichert den insgesamt bezahlten Betrag
    double Rueckgeld=0; //Speichert das Rückgald
    double Einwurf=0;   //Registriert die eingeworfene Münze oder Schein
    int S10=0;          //10Euro Schein
    int S5=0;           //5Euro Schein
    int M2=0;           //2Euro Münze
    int M1=0;           //1Euro Münze
    int M50=0;          //50cent Münze
    int M20=0;          //20cent Münze
    int M10=0;          //10cent Münze

    //Anzeige der nötigen Informationen für Kunde
    printf("Parkdauer: %02d.%02dh \nParkgebühren: %.2lf",DauerStunde,DauerMinute,Gebuehren);

    //Schleife zur Aufforderung des Geld einwerfens
    while(Betrag<Gebuehren){
        printf("\nSchein oder Münze einwerfen (10€,5€,2€,1€,0.50€,0.20€,0.10€): ");
        scanf("%lf",&Einwurf);
        if((Einwurf==10)||(Einwurf==5)||(Einwurf==2)||(Einwurf==1)||(Einwurf==0.5)||(Einwurf==0.2)||(Einwurf==0.1)){
            Betrag=Betrag+Einwurf;
            if(Einwurf==10){
                S10++;
            }
            else if(Einwurf==5){
                S5++;
            }
            else if(Einwurf==2){
                M2++;
            }
            else if(Einwurf==1){
                M1++;
            }
            else if(Einwurf==0.5){
                M50++;
            }
            else if(Einwurf==0.2){
                M20++;
            }
            else if(Einwurf==0.1){
                M10++;
            }
            if(Betrag<Gebuehren){
                printf("Bereits gezahlt: %.2lf€",Betrag);
            }
        }
        else{
            printf("\nKeine gültige Zahlung!\n");
        }
    }

    //Drucken des Parkscheins
    printf("\n=========== PARKSCHEIN ===========");
    printf("\nDatum:         %02d.%02d.%04d",Tag,Monat,Jahr);
    printf("\nEinfahrtszeit: %02d:%02d Uhr",Stunde,Minute);
    printf("\nAusfahrtszeit: %02d:%02d Uhr",AusfahrtStunde,AusfahrtMinute);
    printf("\nParkzeit:      %02d.%02dh",DauerStunde,DauerMinute);
    printf("\nParkgebühr:    %.2lf €",Gebuehren);
    printf("\nGezahlt:       %.2lf (10€:%dx 5€:%dx 2€:%dx 1€:%dx 0.50€:%dx 0.20€:%dx 0.10€:%dx)",Betrag,S10,S5,M2,M1,M50,M20,M10);

    //Berechnen der Stückelung des Rückgeldes
    double Rest;    //Zur Berechnung des Divisionsrestes
    Rueckgeld=Betrag-Gebuehren;
    S10=Rueckgeld/10;   Rest=fmod(Rueckgeld,10);
    S5=Rest/5;          Rest=fmod(Rest,5);
    M2=Rest/2;          Rest=fmod(Rest,2);
    M1=Rest/1;          Rest=fmod(Rest,1);
    M50=Rest/0.5;       Rest=fmod(Rest,0.5);
    M20=Rest/0.2;       Rest=fmod(Rest,0.2);
    M10=Rest/0.1;

    printf("\nRückgeld:      %.2lf (10€:%dx 5€:%dx 2€:%dx 1€:%dx 0.50€:%dx 0.20€:%dx 0.10€:%dx)",Rueckgeld,S10,S5,M2,M1,M50,M20,M10);
    printf("\n==================================\n");
    return 0;
}
LG Alex
 

AGGROStar1991

Well-Known Member
c-b Experte
#2
Vielleicht einfach mal den Fehler mit angeben und noch besser erstmal alle Warnungen beheben?

clang -Weverything wirft mir 27 Warnungen hin und sagt mir es startet nicht wegen eines Adressbereichsfehlers. Und ganz kleiner TIpp : lern eine vernünftige Programmstruktur. Zerleg es in Funktionen und Prozeduren, so kann man die auch brauchbar testen und schreib Tests, bestenfalls vorher.
 

German

Well-Known Member
c-b Experte
#6
Starte doch deine main Funktion erst mal so:
C:
  if (argc < 5)
  {
    puts("Fehler: Die geforderten Kommandozeilenargumente wurden nicht uebergeben.");
    return 1;
  }
 
Oben