Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » <fstream>

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.06.2007, 13:15 Uhr
~sebicool
Gast


Hallo, ich bin C++ Anfänger und wollte gerade ein eigenes Programm schreiben, hab aber immer folgendes Problem, das ich nicht lösen kann.

Ich hab eine Menue mit switch() erstellt.
Ein Menüpunkt erstellt eine Datei und schreibt in ihr mit den Objekten von fstream.
Der zweite Menüpunkt liest aus der Datei.
Der dritte Menüpunlt ist beenden.

So das Programm lässt sich nie kompilieren, weil immer irgendwas übersprungen wird.
Einen case beendet man mit case, oder?

Jedenfalls, wenn ich jetzt einen von den Menüpunkten weglösche, funktioniert das Programm wieder, aber immer nur wenn nur ein case kompiliert wird, egal welcher?

Bitte um Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2007, 13:21 Uhr
Blubber2063



Da wirst du schon mal Code zeigen müssen, wobei ein switch grundsätzlich so aussieht.

C++:
switch(variable){
case(x): anweisungen;
break;// beendet das switch
case(y): anweisungen;
break;
default://optional
break;
}


lässt du das break weg passiert ein "fallthrough", d.h. er führt alles bis zum nächsten break, bzw ende des switch aus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2007, 14:14 Uhr
~sebicool
Gast


Das ist nicht genau der selbe Quellcode, wie beschrieben, macht aber den selben Fehler:

Folgender Quellcode:


C++:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

void filewrite(string dateiname, string vorname, string nachname)
{
    ofstream dat_aus;
    dat_aus.open(dateiname.c_str(), ios_base::out);
    dat_aus << vorname << endl;
    dat_aus << nachname << endl;

    dat_aus.close();
}
    
int main()
{
    cout << "<1> KONTO ERSTELLEN" << endl;
    cout << "Ihre Eingabe: ";
    int eingabe;
    cin >> eingabe;
    switch(eingabe)
    {
    case 1:
        string vorname;
        cout << "Vorname: ";
        cin >> vorname;
        string nachname;
        cout << "Nachname: ";
        cin >> nachname;
        string dateiname = vorname + ".txt";

        filewrite(dateiname, vorname, nachname);
    
        break;

    case 2:
        cout << "Test" << endl;
        break;
    }
    
    return 0;
}




Bearbeitung von 0xdeadbeef:

cpp-Tags eingefügt. Sinnvolle Einrückung. In Zukunft selbst machen.


Dieser Post wurde am 17.06.2007 um 14:23 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2007, 14:25 Uhr
0xdeadbeef
Gott
(Operator)


Es ist kein Wunder, dass er sich da beschwert - case 2 überspringt ja die Deklarationen von vorname, nachname und dateiname, die am Ende des Blocks zerstört werden sollen - die Labels sind ja nur einfache Sprungmarken.

Von daher ist das sinnvollste,

C++:
    switch(eingabe)
    {
    case 1:
        {
            string vorname;
            cout << "Vorname: ";
            cin >> vorname;
            string nachname;
            cout << "Nachname: ";
            cin >> nachname;
            string dateiname = vorname + ".txt";

            filewrite(dateiname, vorname, nachname);
    
            break;
        }

    case 2:
        {
            cout << "Test" << endl;
            break;
        }
    }


zu schreiben. ...oder halt die Variablen außerhalb zu deklarieren.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.06.2007 um 14:26 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2007, 14:52 Uhr
~sebicool
Gast


Danke!
Hat funktioniert!

Noch eine Frage, wie macht man genau Ordnerangaben?

Ich hab einen Ordner mit einem Programm als exe Datei und in diesem Ordner ist noch ein Ordner names Konten. Muss ich dann als dateiname "/Konten/beispiel.txt angeben?
Das funktioniert aber nicht!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.06.2007, 15:12 Uhr
xXx
Devil


hmm erstmal kurz deine Funktion etwas verbessern:

C++:
bool write_person(const std::string& filename, const std::string& prename, const std::string& name)
{
    std::ofstream file_stream(filename.c_str());
    if (!file_stream) return false;
    file_stream << prename << std::endl;
    file_stream << name << std::endl;
    return file_stream.good();
}
?


C++:
#include <fstream>
#include <iostream>
#include <string>

bool write_person(const std::string&, const std::string&, const std::string&);

int main()
{
    std::cout << "(1) Konto erstellen" << std::endl;
    std::cout << "Eingabe: ";
    unsigned short input = 0;
    std::cin >> input;
    switch (input)
    {
    case 1:
    {
        std::cout << "Vorname: ";
        std::string prename;
        std::cin >> prename;
        std::cout << "Nachname: ";
        std::string name;
        std::getline(std::cin, name);
        std::string file_name("data\\users\\");
        file_name += prename;
        file_name += "_";
        file_name += name;
        file_name += ".txt";
        write_person(filename, prename, name);
    } break;
    case 2:
        std::cout << "Test" << std::endl;
        break;
    }
}

bool write_person(const std::string& filename, const std::string& prename, const std::string& name)
{
    std::ofstream file_stream(filename.c_str());
    if (!file_stream) return false;
    file_stream << prename << std::endl;
    file_stream << name << std::endl;
    return file_stream.good();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: