Anfänger braucht Hilfe :)



  • d.open("Deutsch", ios::out);
    			e.open("English", ios::out);
    

    Du hättest dein Problem von Anfang an nicht, wenn du direkt den richtigen Filestream verwendet hättest.

    std::ifstream d("Deutsch");
    			std::ifstream e("English");
    

    Nennt sich RAII. Mit RAII ist auch folgendes unnötig:

    d.close();
    			e.close();
    
    cin.ignore(std::cin.rdbuf()->in_avail());
    

    Tut nicht, was du willst. Was du willst, ist:

    std::cin.ignore(std::numeric_limits<std::steamsize>::max());
    
    while (!d.eof())
    

    Ist eine falsche Bedingung. Richtig wäre:

    while(std::getline(d, wortd) && std::getline(e, worte))
    

    Deine ganzen gotos und Sprungmarken sind Käse, dafür gibts Schleifen und Funktionen.



  • 314159265358979 schrieb:

    Nennt sich RAII.

    CStoll schrieb:

    PS: Und ich wette mit dir, daß gleich Pi vorbeikommt und dich auf RAII hinweist 😃

    Respekt, auf dich ist verlass! 🤡



  • otze schrieb:

    Respekt, auf dich ist verlass! 🤡

    Muss ja, kann den armen CStoll doch nicht ewig warten lassen 😉



  • 314159265358979 schrieb:

    Was du willst, ist:

    std::cin.ignore(std::numeric_limits<std::steamsize>::max());
    

    Nicht ganz, denn die Zeile ignoriert alles, was jemals noch aus cin gekommen wäre (oder zumindest die nächsten... ähh.. 4 GiB).

    Eine Abbruchbedingung wäre gut. Die zweite Überladung von ignore ignoriert Zeichen bis entweder die übergebene Anzahl erreicht oder ein Delimiter gelesen wurde:

    std::cin.ignore(std::numeric_limits<std::steamsize>::max(), '\n');
    


  • Da hast du natürlich Recht, Schande über mein Haupt 🤡



  • Falls TE meckert, dass

    std::cin.ignore(std::numeric_limits<std::steamsize>::max(), '\n');
    

    nicht funktioniert hier der Hotfix:

    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    


  • 😃 👍



  • DocShoe schrieb:

    Hotfix:

    Verdammtes Coy & Pate...



  • Danke für eure Hilfe;)
    aber eine frage hätte ich noch, da ich es noch nciht weiss:
    Gibt es ne möglichkteit bei

    d.getline(wortd, sizeof(wortd))
    

    Eine zufällige Zeile auszulesen?

    Schonmal danke im vorraus;)

    Nimiz


  • Mod

    Nimiz schrieb:

    Danke für eure Hilfe;)
    aber eine frage hätte ich noch, da ich es noch nciht weiss:
    Gibt es ne möglichkteit bei

    d.getline(wortd, sizeof(wortd))
    

    Eine zufällige Zeile auszulesen?

    Schonmal danke im v******;)

    Nimiz

    Erst einmal: Nimm keine char-Arrays, nimm std::string und das dazugehörige getline. Du wirst dankbar sein.

    Und zweitens: Nein. Zumindest gibt es keine magische Funktion get_random_line . Da musst du selber anfangen zu zauber und sie dir selber schreiben. Empfohlene Vorgehensweise: Alle Zeilen einlesen und speichern (std::vector). Bei Bedarf nach einer zufälligen Zeile eine zufällige Zeile aus dem vector nehmen (neuer Header random, oder falls noch nicht vorhanden rand aus cstdlib).



  • Nimiz schrieb:

    Schonmal danke im v******;)

    Um die naechste Frage vorwegzunehmen:

    voraus


Anmelden zum Antworten