Seite 1 von 1

Puffer leren (C++)

Verfasst: Di Jul 14, 2009 5:25 pm
von G_loW
hi ich bins mal wieder,
und jetzt sogar ein stück weiter
hier der code:

Code: Alles auswählen

////////////////////////////////////////////
#include <iostream>
#include <fstream>
#include <time.h>

#define MAX 10

using namespace std;
fstream file("testfile.txt");

////////////////prototyp////////////////////
short load(char *);
short save(char *);
////////////////////////////////////////////
/////////////////main///////////////////////
int main (void)
{
    char S1[MAX] = {0};
    char S2[MAX] = {0};
    char S3[MAX] = {0};
    char *Name = S1;
    char *Input = S2;
    short i = 0;
    //////////////////////
    do
    {

        cin >> i;

        if (i == 1)
        {
            cout << "Lade Profil.....";

            if (load(Name) == true)
                cout <<"Fertig\n\n---"<<Name;
            else
                cout << "Fehler X-[";
        }
        if (i == 2)
        {
            cout << "Gib dein proflnamen ein:";
            cin >> *Input;
            cout << "Speichere.....";

            if (save(Input) == true)
                cout << "Ferig\n\n";
            else
                cout << "Fehler X-[";
        }
        else
            continue;
    }
    while (1);

        file.close ();
    return 0;
}
/////////////////////////////load////////////
short load (char *Name)
{

    if (file >> Name)
        return true;
    else
        return false;

}
/////////////////////////////save////////////
short save (char *Input)
{
    if (file << Input)
        return true;
    else
        return false;

}
leider hab ich auch wieder ein proplem:
Hmmm.... wie erkläre ich das jetzt :?:
testet einfach selbst

Lösung:
ich glaube ich muss den puffer leren hab aba keine ahnung wie(in c kann man ja fflush benutzen(was aber auch net sogut sein soll))


Und weils so schon ist noch ne Frage :mrgreen:
ist es möglich das das prog. "testfile.txt" selbst erstellt wenn nich existiert?

Re: Puffer leren (C++)

Verfasst: Di Jul 14, 2009 5:57 pm
von Xin
Ich habe keinen Fehler gefunden.

Das könnte natürlich auch daran liegen, dass ich nicht weiß, wonach ich suchen muss. Ich gehe davon aus, dass alle Effekte so erwünscht sind. Falls da Effekte sind, die nicht erwünscht sind, wäre es von Vorteil zu wissen, was Du Dir wünschst, und was stattdessen passiert.

Re: Puffer leren (C++)

Verfasst: Di Jul 14, 2009 6:39 pm
von Dirty Oerti

Code: Alles auswählen

cin.clear()
:) Damit solltest du auf jedenfall den Puffer leeren können.

Re: Puffer leren (C++)

Verfasst: Mi Jul 15, 2009 12:18 pm
von G_loW
Der fehler war das wenn ich speichern wolte die konsole unendlich mal Fehler X-[ ausgab.
Nachdem ich clear() hinzufüge zeigt er nurnoch so viele Fehler wie das eingegebene wort buchstaben hat.
Aber speichern kann ich nicht mehr :!:

Hier der neue code

Code: Alles auswählen

////////////////////////////////////////////
#include <iostream>
#include <fstream>
#include <time.h>

#define MAX 10

using namespace std;
fstream file("testfile.txt");

////////////////prototyp////////////////////
short load(char *);
short save(char *);
////////////////////////////////////////////
/////////////////main///////////////////////
int main (void)
{
    char S1[MAX] = {0};
    char S2[MAX] = {0};
    char S3[MAX] = {0};
    char *Name = S1;
    char *Input = S2;
    short i = 0;
    //////////////////////
    do
    {

        cin.clear();
        cin >> i;

        if (i == 1)
        {
            cout << "Lade Profil.....";

            if (load(Name) == true)
                cout <<"Fertig\n\n---"<<Name;
            else
                cout << "Fehler X-[\n";
        }
        if (i == 2)
        {
            cout << "Gib dein proflnamen ein:";
            cin.clear();
            cin >> *Input;
            cout << "Speichere.....";

            if (save(Input) == true)
                cout << "Ferig\n\n";
            else
                cout << "Fehler X-[\n";
        }
        else
            continue;
    }
    while (1);

    file.close ();
    return 0;
}
/////////////////////////////load////////////
short load (char *Name)
{
    file.clear();

    if (file >> Name)
        return true;
    else
        return false;

}
/////////////////////////////save////////////
short save (char *Input)
{
    file.clear();

    if (file << Input)
        return true;
    else
        return false;

}

ich hab sogar versucht den "file"-stream zu clearen :mrgreen:

Re: Puffer leren (C++)

Verfasst: Mi Jul 15, 2009 3:34 pm
von Kerli
Ich weiß jetzt zwar nicht wo genau der Fehler liegt, aber im allgemeinen würde ich dir einmal empfehlen Dateien erstens nur solange geöffnet lassen wie nötig, dh. am Besten direkt in den Funktionen und nicht als globale Variable, und zweitens würde ich eher ifstream und ofstream anstatt fstream zu verwenden, da so immer klar ist, dass du entweder eine Datei liest oder in eine schreibst. Ich glaube nämlich kaum das du gleichzeitig in eine Datei schreiben und aus ihr lösen möchtest. Das würde ein paar ungewollten aber leicht vorkommenden Fehlern vorbeugen.

Übrigens bei mir schlägt es schon beim Öffnen der Datei fehl. Überprüf das doch einmal bei dir mit "if( file.is_open() )"...

Re: Puffer leren (C++)

Verfasst: Do Jul 16, 2009 3:48 pm
von G_loW
ich hab jetz so umgeschrieben das ich wieder lesen kann

Code: Alles auswählen

////////////////////////////////////////////
#include <iostream>
#include <fstream>
#include <time.h>

#define MAX 10

using namespace std;

////////////////prototyp////////////////////
short load(char *);
short save(char *);
////////////////////////////////////////////
/////////////////main///////////////////////
int main (void)
{
    char S1[MAX] = {0};
    char S2[MAX] = {0};
    char S3[MAX] = {0};
    char *Name = S1;
    char *Input = S2;
    short i = 0;
    //////////////////////
    do
    {

        cin.clear();
        cin >> i;

        if (i == 1)
        {
            cout << "Lade Profil:\n\n";

            if (load(Name) == true)
                cout <<"\nFertig: "<< Name << endl;

        }
        if (i == 2)
        {
            cout << "Gib dein Profilnamen ein:";

            cin.clear();
            cin >> *Input;
            cout << "Speichere.....";

            if (save(Input) == true)
                cout << "Ferig\n\n";

        }
        else
            continue;
    }
    while (1);

    return 0;
}
/////////////////////////////load////////////
short load (char *Name)
{
    ifstream Ifile("testfile.txt");
    ///////////////////////////////


    if (Ifile.is_open())
    {
        cout << "open__________[OK]\n";


        if (Ifile >> Name)
        {
            cout << "load__________[OK]\n";
            return true;
        }

        else
        {
            cout << "load________[FAIL]\n";
            return false;
        }

    }

    else
    {
        cout << "open________[FAIL]\n";
        return false;
    }
    Ifile.close ();
}
/////////////////////////////save////////////
short save (char *Input)
{

    ofstream ofile("testfile.txt");
    //////////////////////////////


        if (ofile.is_open())
        {
            cout << "open__________[OK]\n";


            if (ofile << Input)
            {
                cout << "save__________[OK]\n";
                return true;
            }

            else
            {
                cout << "save________[FAIL]\n";
                return false;
            }

        }

        else
        {
            cout << "open________[FAIL]\n";
            return false;
        }


    ofile.close();
}
allerdings ist der code jetzt ziemlich lang und wenn ich speichern will
speichert er nur den letzten buchstaben

das liegt warscheinlich daran das er immer den letzten überschreibt
also muss ich die schreibprosition eins nach hinten verschieben

aba wie :?:

oder ich laber mist un es liegt woanders

Re: Puffer leren (C++)

Verfasst: Do Jul 16, 2009 4:53 pm
von Kerli
G_loW hat geschrieben:allerdings ist der code jetzt ziemlich lang und wenn ich speichern will
speichert er nur den letzten buchstaben
Lang ist immer relativ :P Das stimmt nicht ganz. Vielleicht ist der aufgefallen das er so oft speichert wie der eingegebene Name Buchstaben lang ist. Das liegt daran das du beim Einlesen mit "cin >> *Input;" immer nur ein einzelnes Zeichen (char) einliest, da du den Zeiger mit dem Derefernzierungsoperator zu einem char machst. Deine Schleife läuft also solange bis ein \n (Newline -> durch Enter) im Eingabestrom gefunden wird. cin.clear() löscht nämlich nur die Fehlerbits aber nicht noch ausstehende Zeichen im Eingabestrom. In deinem Fall wird es also reichen einfach den * wegzulassen.

Ansonsten wenn du mit C++ Streams arbeitest würde ich dir auch einmal empfehlen dir die std::string Klasse anzuschauen...

Re: Puffer leren (C++)

Verfasst: Do Jul 16, 2009 10:40 pm
von G_loW
ok,
Verzeih meine unwissenheit aber,wie kann ich die std::string Klasse anzuschauen :?:

Re: Puffer leren (C++)

Verfasst: Fr Jul 17, 2009 9:20 am
von Kerli
G_loW hat geschrieben:ok,
Verzeih meine unwissenheit aber,wie kann ich die std::string Klasse anzuschauen :?:
Am Besten ist immer noch die Referenz auf cplusplus.com, aber ich glaube für den Einstieg doch nicht ganz so geeignet. Schau doch besser einmal zum Beispiel in dieses Wikibook.