true wird als false erkannt



  • Hi, in diesem Programm gibt es 50 Lagerplätze. True = besetzt, false = frei.

    #include <iostream>
    
    using namespace std;
    
    //Funktion um einen Freien Lagerplatz zu suchen
    int Suche(bool Plaetze[50]){
        for(int i=0; i<50; i++)
        {
            if(Plaetze[i]==false){
                cout<<"Lagerplatz "<<Plaetze[i]<<" ist frei."<<endl;
                return i;}
        }
    }
    
    
    int main()
    {
        bool Lagerplatz[50];
    
        for(;;){                    //Endlosschleife
            int Platz;
            Platz = Suche(Lagerplatz);
            Lagerplatz[Platz]=true; //Hiernach ist Lagerplatz[0] = true
            cin.get();
        }
    
        return 0;
    }
    

    Eigentlich erwarte ich als Ausgabe:
    Platz 0 ist frei.
    Platz 1 ist frei.
    Platz 2 ist frei.
    ...

    Ich bekomme aber:
    Platz 0 ist frei.
    Platz 0 ist frei.
    Platz 0 ist frei.
    ...



  • Du gibst Plaetze[i] aus. 0 ist false.

    Dein Array ist nicht initialisiert!

    Suche liefert immer noch nicht in allen Fällen einen Wert.



  • @theAnfänger77 Ich habe dir doch gerade vorhin schon gesagt, dass du mit Warnungen kompilieren sollst und dass deine Funktion fehlerhaft ist. Du solltest sowas wie warning: control reaches end of non-void function [-Wreturn-type] bekommen.

    Außerdem ist dein Lagerplatz nicht initialisiert. Du hast 50 zufällige Werte in Lagerplatz.

    Der andere Fehler ist der hier:

    cout<<"Lagerplatz "<<Plaetze[i]<<" ist frei."<<endl;
    

    Plaetze[i] ist ein bool, also 0, weil du ja nach false suchst. Du willst ausgeben:

    cout<<"Lagerplatz "<< i <<" ist frei."<<endl;
    


  • Warum machst du es dir so schwer und verwendest keinen std::vector? Evtl solltest du dein Lernmaterial hinterfragen ob es noch zeitgemäß ist.



  • Vielen Dank nochmal! 🙂



  • Kleiner Tipp am Rande:

    bool Lagerplatz[50]{}; // Alle auf false initialisiert
    

    In C oder älteren Standards:

    bool Lagerplatz[50] = {0};
    

    Die Größe des Arrays solltest Du in Suche nicht hardcoden, aber das wurde ja schon gesagt.



  • übrigens die verwendung von präprozessorkonstanten, also sowas wie

    #define NUMPLAETZE 50
    
    int Suche(bool Plaetze[NUMPLAETZE])
    {
         for(i = 0; i < NUMPLAETZE; i++)
    .....
    }
    
    
    int main()
    {
         bool Lagerplatz[NUMPLAETZE];
    .....
    }
    
    

    solltest du dir unbedingt angewöhnen. wenn du plötzlich 55 plätze brauchst, musst du bei der verwendung von präprozessorkonstanten nur eine stelle ändern, aber sonst suchst du dich irgendwann tot.



  • @Wade1234

    übrigens die verwendung von präprozessorkonstanten [...] solltest du dir unbedingt angewöhnen.

    Lach ich dacht grad ich lese nicht richtig :o

    Bitte gewöhn dir das nicht an. Wenn schon sowas wie:

    constexpr int NUMPLAETZE{50};
    


  • wtf sowas gibt es?



  • @Wade1234 sagte in true wird als false erkannt:

    wtf sowas gibt es?

    Türlich türlich sicher digger



  • @Wade1234 sagte in true wird als false erkannt:

    solltest du dir unbedingt aBgewöhnen.

    ftfy.



  • @HarteWare sagte in true wird als false erkannt:

    @Wade1234

    übrigens die verwendung von präprozessorkonstanten [...] solltest du dir unbedingt angewöhnen.

    Lach ich dacht grad ich lese nicht richtig :o

    Bitte gewöhn dir das nicht an. Wenn schon sowas wie:

    constexpr int NUMPLAETZE{50};
    

    genau. Wenn überhaupt, dann so. Präprocessor-Konstanten gewöhnt man sich am besten gar nicht an. Und schon gar keine, die mit Programmablauf zu tun haben. Präprocessorkonstanten sind eher was für das Makefile ( -D ).

    Abgesehen davon arbeitet man in der Realität selten mit festen Längen von Containern. Die Länge ist meist unbekannt also dynamisch oder sie ergibt sich aus Startparametern der Anwendung oder Konfigurationsdateien.


Log in to reply