Schnelle objektorientierte, kompilierende Programmiersprache.
-
G_loW
- Beiträge: 29
- Registriert: Mi Jan 14, 2009 10:05 pm
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
ist es möglich das das prog. "testfile.txt" selbst erstellt wenn nich existiert?
use Linux
use Code::Blocks
-
Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
-
Kontaktdaten:
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.
-
Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Beitrag
von Dirty Oerti » Di Jul 14, 2009 6:39 pm

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
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

use Linux
use Code::Blocks
-
Kerli
- Beiträge: 1456
- Registriert: So Jul 06, 2008 10:17 am
- Wohnort: Österreich
-
Kontaktdaten:
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
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
-
Kerli
- Beiträge: 1456
- Registriert: So Jul 06, 2008 10:17 am
- Wohnort: Österreich
-
Kontaktdaten:
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

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
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
-
Kerli
- Beiträge: 1456
- Registriert: So Jul 06, 2008 10:17 am
- Wohnort: Österreich
-
Kontaktdaten:
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