Puffer leren (C++)

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
G_loW
Beiträge: 29
Registriert: Mi Jan 14, 2009 10:05 pm

Puffer leren (C++)

Beitrag von G_loW » Di Jul 14, 2009 5:25 pm

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?
use Linux
use Code::Blocks

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Puffer leren (C++)

Beitrag von Xin » Di Jul 14, 2009 5:57 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Puffer leren (C++)

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

Code: Alles auswählen

cin.clear()
:) Damit solltest du auf jedenfall den Puffer leeren können.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

G_loW
Beiträge: 29
Registriert: Mi Jan 14, 2009 10:05 pm

Re: Puffer leren (C++)

Beitrag von G_loW » Mi Jul 15, 2009 12:18 pm

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:
use Linux
use Code::Blocks

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Puffer leren (C++)

Beitrag von Kerli » Mi Jul 15, 2009 3:34 pm

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() )"...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

G_loW
Beiträge: 29
Registriert: Mi Jan 14, 2009 10:05 pm

Re: Puffer leren (C++)

Beitrag von G_loW » Do Jul 16, 2009 3:48 pm

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
use Linux
use Code::Blocks

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Puffer leren (C++)

Beitrag von Kerli » Do Jul 16, 2009 4:53 pm

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...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

G_loW
Beiträge: 29
Registriert: Mi Jan 14, 2009 10:05 pm

Re: Puffer leren (C++)

Beitrag von G_loW » Do Jul 16, 2009 10:40 pm

ok,
Verzeih meine unwissenheit aber,wie kann ich die std::string Klasse anzuschauen :?:
use Linux
use Code::Blocks

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Puffer leren (C++)

Beitrag von Kerli » Fr Jul 17, 2009 9:20 am

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten