Programmhilfe



  • Hey Leute ich muss ein Programm schreiben was sich auf einem Tierpark bezieht, doch nun hänge ich am ersten Fehler wo ich nicht weiterkomme. Man soll einen neuen Bereich erstellen können, das klappt auch!
    Aber aus komischen Gründen kommt trotzdem obwohl ich es rausgelöscht hab "Gehege oder Gebäude" bei der ersten Eingabe beim erstellen. Kann mir einer bitte helfen 🙄

    #include <iostream>
    #include <fstream>
    #include "bereichlist.h"
    
    void newLinie(LinienList& LinienList) {
        string bnam, fun, gro;
    
    	std::cout<<"============================================="<<std::endl;
        std::cout<<"========== Neuen Bereich erstellen =========="<<std::endl;
        std::cout<<"Name: "<<std::endl;
        std::cin>>bnam;
        std::cout<<"Funktion: "<<std::endl;
        std::cin>>fun;
        std::cout<<"Größe: "<<std::endl;
        std::cin>>gro;
        std::cout<<" "<<std::endl;
    
        Linie linie(bnam, fun, gro);
        LinienList.addLinie(linie);
    }
    
    void menu(LinienList& linieList){
    
        int answ;
        do{
    
    	std::cout<<" "<<std::endl;
    	std::cout<<"=================================================="<<std::endl;
    	std::cout<<"========== Tierpark Verwaltungsprogramm =========="<<std::endl;
    	std::cout<<"=================================================="<<std::endl;
        std::cout<<"1		Neuen Bereich erstellen"<<std::endl;
    	std::cout<<"2		Neues Tier erfassen"<<std::endl;
    	std::cout<<"3		Anzeigen aller Tiere eines Bereiches"<<std::endl;
    	std::cout<<"4		Gesamtliste aller Tiere im Park"<<std::endl;
    	std::cout<<"5		Gesamtliste aller Bereiche im Park"<<std::endl;
    	std::cout<<" "<<std::endl;
    	std::cout<<"0		Programm beenden"<<std::endl;
    	std::cout<<"- - - - - - - - - - - - - - - - - - - - - - - - - "<<std::endl;
    	std::cout<<"Auswahl: ";
    	std::cin>>answ;
    	std::cout<<" "<<std::endl;
    
            switch(answ){
            case 1:
                newLinie(linieList);
                break;
    
            case 2:
    			//neues Tier erfassen
                break;
    
            case 3:
    			//Tiere eines Bereiches
                break;
    
            case 4:
    			//Gesamtliste aller Tiere im Park
                break;
    
            case 5:
                linieList.showLinieList();
                break; 
    
            case 0:
                break;
    
            default:
                cout<<"Falsche Eingabe: "<<answ<<endl;
            }
    
        }while(answ != 0);
    
    }
    
    int main(){
    
        LinienList linieList;
    
        linieList.readFile("bereich.dat");
        menu(linieList);
        linieList.writeFile("bereich.dat");
    }
    
    [code="cpp"]
    #include "bereich.h"
    #include <iostream>
    
    Linie::Linie()
    {}
    
    Linie::Linie(string bnam, string fun, string gro):
        myBnam(bnam), myFun(fun), myGro(gro)
    {}
    
    void Linie::showLinie(){
        cout<<"============================================="<<endl;
        cout<<"Name: "<<myBnam<<endl;
        cout<<"Funktion: "<<myFun<<endl;
        cout<<"Größe: "<<myGro<<endl;
        cout<<"============================================="<<endl;
    }
    
    #include "bereichlist.h"
    #include <fstream>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    LinienList::LinienList()
    {}
    
    void LinienList::writeFile(const string filename){
        ofstream fo(filename.c_str());
        if(!fo){
            cout<<"Datei kann nicht geschrieben werden"<<endl;
            return;
        }
        fo<<myAnz<<endl;
        for(int i = 0; i < getAnz(); i++){
            fo<<myLinieList[i].getBnam()<<endl;
            fo<<myLinieList[i].getFun()<<endl;
            fo<<myLinieList[i].getGro()<<endl;
        }
    }
    
    void LinienList::readFile(const string filename){
        ifstream fi(filename.c_str());
        if(!fi){
            cout<<"Datei kann nicht gelesen werden"<<endl;
            return;
        }
    
        int anz;
        fi>>anz;
        fi>>ws;
        setAnz(anz);
    
        string bnam, fun, gro;
    
        for(int i = 0; i < anz; i++){
                getline(fi, bnam);
                getline(fi, fun);
                getline(fi, gro);
    
                Linie linie(bnam, fun, gro);
                myLinieList[i] = linie;
        }
        fi.close();
    }
    
    void LinienList::addLinie(const Linie &linie){
        myLinieList[myAnz] = linie;
        myAnz++;
    }
    
    void LinienList::deleteLinie(){
    
        string nr;
        cin>>nr;
        int index;
    
        for(int i = 0; i < myAnz-1; i++){
            if(myLinieList[i].getNr() == nr){
                index = i;
            }else{
                cout<<"Nichts gefunden"<<endl;
                return;
            }
        }
    
        for(int k = index; k < myAnz; k++){
            myLinieList[k] = myLinieList[k+1];
        }
    
        myAnz--;
    }
    
    void LinienList::showLinieList(){
        for(int i = 0; i < myAnz; i++){
            myLinieList[i].showLinie();
        }
    }
    

    Die dazugehörigen Headerdateien noch

    #ifndef BEREICHLIST_H
    #define BEREICHLIST_H
    #include "bereich.h"
    #include <string>
    
    using namespace std;
    
    const int MAXSIZE = 20;
    class LinienList{
    private:
        Linie myLinieList[MAXSIZE];
        int myAnz;
    
    public:
        LinienList();
    
        void setAnz(int anzLinie) { myAnz = anzLinie; }
    
        int getAnz() const { return myAnz; }
    
        void addLinie(const Linie& linie);
        void readFile(const string filename);
        void showLinieList();
        void writeFile(const string filename);
        void deleteLinie();
    
    };
    
    #endif // BEREICHLIST_H
    
    #ifndef BEREICH_H
    #define BEREICH_H
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    class Linie{
    private:
        string myBnam;
        string myFun;
        string myGro;
    
    public:
        Linie();
        Linie(string bnam, string fun, string gro);
    
        //getter
        string getBnam() const { return myBnam; }
        string getFun() const { return myFun; }
        string getGro() const { return myGro; }
    
        //setter
        void setBnam(string bnam){ myBnam = bnam; }
        void setFun(string fun){ myFun = fun; }
        void setGro(string gro){ myGro = gro; }
    
        void showLinie();
    };
    
    #endif // BEREICH_H
    

    Seit mir bitte nicht böse wenn ich etwas sehr falsch gemacht hab oder was auch immer. Versuche es ja auch nur zu lernen und zu verstehen 😞



  • Nein, "Gehege oder Gebäude" kommt im Code nicht vor.



  • Hää wenn ich aber das Programm starte bei mir und immer einen neuen Bereich erstllen möchte, zeigt er als erstes "Gebäude oder Gehege:" an 😮



  • Da ich keine Stelle finde, die die Ausgabe beidngen würde, tippe ich darauf, dass du nicht neu kompiliert hast. Also -> geänderte Datei speichern -> neu kompilieren.



  • Das hab ich auch schon gemacht kommt aber trotzdem immer wieder :p
    Vielleicht kannst du dann bei meinen anderen Problem helfen, wenn man sich die Bereichsliste anzeigen lässt ist dann immer ein Bereich (mit Name, Funktion...) komplett durcheinander, aber ich verstehe nicht warum 😕



  • Hast du evtl. noch eine alte Instanz vom Programm am laufen?
    Dann kann der Linker keine Exe erstellen.



  • Der gezeigte Code hat nichts mit dem Programm zu tun. Es wäre also verschwendete Zeit darauf einzugehen.



  • Sorry für die blöde Frage, aber warum hat der gezeigte Code nichts mit dem Programm zu tun? Das Programm läuft doch nur allein über die gezigten Codes



  • manni66 schrieb:

    Nein, "Gehege oder Gebäude" kommt im Code nicht vor.

    Du kannst ja gernen einmal (auf dieser Seite) suchen.
    Woher sollen wir wissen wo das bei dir stand?



  • Sickl3Zz schrieb:

    Sorry für die blöde Frage,

    Das ist sie in der Tat.

    Sickl3Zz schrieb:

    aber warum hat der gezeigte Code nichts mit dem Programm zu tun? Das Programm läuft doch nur allein über die gezigten Codes

    Wenn dein Programm "Gehege oder Gebäude" ausgibt, ist es nicht aus dem geziegten Code entstanden.



  • Ich hab glaube den Fehler gefunden. Es liegt glaube ich im ersten Code ganz unten an der "bereich.dat" da er da recht stark rumspinnt wenn ich was ändern möchte. Danke



  • Und Du benutzt members, die nicht existieren. Es gibt in der Klasse Linie kein getNr() , wie Du es in LinienList::deleteLinie() gerne hättest.



  • lemon03 schrieb:

    Und Du benutzt members, die nicht existieren. Es gibt in der Klasse Linie kein getNr() , wie Du es in LinienList::deleteLinie() gerne hättest.

    Ja na das weiß ich schon, hab das noch drinne weil ich das dann noch wo brauche



  • Das bedeutet aber, das der gezeigte Code nie kompiliert hätte und deshalb Dein Hinweis, da steht etwas von "Gehege" oder "Gebäude" nicht überprüft werden kann. Natürlich kann man das wohl auch ohne Code-Ausführung erkennen, aber praktisch hätte Du auch keinen Code zeigen können, weil nichts mit dem Thema zu tun.

    Sorry für die blöde Frage, aber warum hat der gezeigte Code nichts mit dem Programm zu tun? Das Programm läuft doch nur allein über die gezigten Codes

    Bei solchen Aussagen also immer etwas Vorsicht walten lassen. Da ist nämlich gar nichts gelaufen.



  • Ich glaube, es hapert (unter anderem) an Kenntniss deiner Entwicklungsumgebung.

    Also, welche IDE benutzt du? Welchen Compiler benutzt du? Was für eine Ausgabe liefert der Compiler? Wie lemon03 schrieb, so wird das kein Compiler übersetzen.

    Mein Tipp, das kompiliert nicht und du führst die alte Version aus.


Anmelden zum Antworten