Klassen mit strings



  • vieleicht ist der Name etwas ungünstig gewählt, aber für die Variable vok wird immer

    vok = new vokabel[anzahl];

    Speicher reserviert. Das heißt, sie hat den Index von 0 - Anzahl.

    /edit:

    oder hab ich das komplett falsch verstanden und man gibt in der Klammer nicht den höchsten Index, sondern die Anzahl an? ich glaub jetzt hats klick gemacht 😃

    /edit 2:

    hab ich wohl von VB so übernommen^^



  • Twister schrieb:

    vieleicht ist der Name etwas ungünstig gewählt, aber für die Variable vok wird immer

    vok = new vokabel[anzahl];

    Speicher reserviert. Das heißt, sie hat den Index von 0 - Anzahl.

    /edit:

    oder hab ich das komplett falsch verstanden und man gibt in der Klammer nicht den höchsten Index, sondern die Anzahl an? ich glaub jetzt hats klick gemacht 😃

    so ist es wenn du anzahl elemente reservierst dann kanns du auf die elemente 0 .. anzahl-1 zugreifen.
    K.



  • ok, ich werd dann mal den ganzen Code durchgehen und umändern 😃
    was mir aber grad noch aufgefallen ist:

    trainer()
    {
    	anzahl = 1;
    	ifstream in("vok.txt");
    	while(!in.eof())
    	{
    		char ch;
    		in>>ch;
    		if(ch == '\n') ++anzahl;
    		}
    	vok = new vokabel[anzahl];
    	in.close();
    	load();
    };
    

    Bei dem Konstruktor durchläuft er die if-Schleife nicht, die Anzahl erhöht. Daher wohl die ganzen Speicherfehler. Am Ende ist Anzahl immer 1 und es wird zu wenig Platz reserviert!
    Woran könnte das liegen?



  • das liegt daran das

    in>>ch;
    

    kein '\n' zurückgibt 🙂
    K.



  • hm... und was gibt er statt dessen zurück?

    Oder müsste ich das dann mit einem string auslesen, damit es funktioniert?



  • vielleicht so:

    #include <iostream>
    #include <fstream>
    
    int main() {
        int anzahl = 0;
        std::ifstream in("vok.txt");
        std::string s;
        char buffer[100];
        while(!in.eof())
        {
           in.getline(buffer,100);
           s = buffer;
           std::cout << s << std::endl;
           if ( s.length() ) anzahl++;
        }
        std::cout << anzahl << std::endl;
     }
    


  • thx 🙂

    habs jetzt so gemacht:

    while(!in.eof())
    {
    	char ch[100];
    	in.getline(ch,100);
    	++anzahl;
    }
    

    da 1 Reihe = 1 Vokabel(Deu + Engl) und er nach der letzten Reihe die while-Schleife verlässt, klappts so 🙂

    ich teste mal eben das komplette Prog durch, ob noch Fehler auftreten 😃



  • solange keine leeren zeilen in deinem file sind.
    K.



  • nö, kommen keine leeren Zeilen rein.

    Funktioniert nun auch alles. Danke für die Hilfe 🙂



  • nochmal eine kurze Frage:

    ich will das Prog jetzt als Stand-alone einrichten, damit auch Leute die kein vcpp haben es starten können.
    Allerdings wenn ich die exe (erstellen -> vokabeltrainer.exe erstellen) ausführe bleibt die Konsole leer.

    /edit:

    also wenn ich die Exe so starte... wenn ich sie aus vcpp raus starte ist alles normal.



  • Twister schrieb:

    ich will das Prog jetzt als Stand-alone einrichten, damit auch Leute die kein vcpp haben es starten können.
    Allerdings wenn ich die exe (erstellen -> vokabeltrainer.exe erstellen) ausführe bleibt die Konsole leer.

    verstehe dich nicht. wenn du erstellen -> vokabeltrainer.exe erstellen ausführst dann erzeugst du eine .exe datei. natürlich bleibt dann die konsole leer.
    wenn du damit meinst wo diese .exe datei hinkommt weiss ich nicht wie das bei deiner vc version ist. bei vc6 war sie jedenfalls im unterverzeichnis .\debug oder
    .\release.
    K.



  • habs schon gelöst 😃

    ich meinte damit, daß wenn ich in vcpp auf "exe ausführen" gehe, daß dann alles normal läuft wie ich es geproggt hab.
    Aber wenn ich auf die Platte in den Debug-Ordner gehe, wo die exe ist, und sie da ausführe, dann blieb der Bildschirm leer.

    Lag allerdings darin, daß er unter vcpp die "vok.txt" in Projektordner brauchte und die Exe alleine brauchte die "vok.txt" im Debug-Ordner... jetzt läufts auf jeden Fall 🙂

    danke nochmal



  • /edit:

    hat sich erledigt 😃


Anmelden zum Antworten