C++ Buchstaben und Leerzeichen in File schreiben?

Hallo, erst mal da ich neu hier bin!
Also, zuerst einmal ich programmiere erst seit gut einer Woche darum bitte nicht auslachen!
Mein Problem:
Ich habe einen "Editor" für Dos-Prompt geschrieben.
Mit den Funktionen: Datei anlegen und beschreiben
Datei löschen
etc.
Nun meine Frage: Wie kann ich einen Text in eine Datei schreiben, heißt mit Leerzeichen(ohne funktioniert es ja).
Der Code:
Achtung: Es sind noch nicht alle switch anweisungen mit einer Funktion ausgestattet!
----------------------------------------------------------------------------------------------------
// Editor für Ein und Ausgabe
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct editor
{
string x;
string tmp;
char y;
};

editor read_in()
{
ifstream dat_ein;
editor einlesen;

cout << endl;
cout << "Geben Sie den Namen\\Pfad zur Datei ein: ";
cin >> einlesen.x;
cout << endl;

dat_ein.open(einlesen.x.c_str(), ios_base::out);

if(!dat_ein)
{
cout << "Datei konnte nicht geöffnet werden: " << endl;
cout << endl;
}

while(!dat_ein.eof())
{
dat_ein.get(einlesen.y);
cout << einlesen.y;
}
dat_ein.close();
fflush(stdin);
getchar();
return einlesen;
}
/* Hier liegt das Problem! und zwar bei:
cout << "Text eingeben: ";
cin >> lesen.tmp;
dateiname << lesen.tmp << endl;
Wenn ich einen Text eingebe werden nur die Buchstabe bis zu einem Leerzeichen
in die Datei geschrieben! Soll ich es mit einem char Datentype versuchen, ja? aber wie?*/

editor write_in()
{
ofstream dateiname;
editor lesen;

cout << endl;
cout << "Geben Sie den Pfad an in dem Sie die Datei amlegen wollen: ";
cin >> lesen.x;
cout << endl;

dateiname.open(lesen.x.c_str(), ios_base::out);

if(!dateiname)
{
cout << "Datei kann nicht angelegt werden," << endl;
cout << "bzw. der Pfad >> " << lesen.x << " << existiert nicht!" << endl;
}

cout << "Text eingeben: ";
cin >> lesen.tmp;

dateiname << lesen.tmp << endl;

return lesen;
}

int main() {

int befehl;


cout << "\t\t\t-----------------------------------" << endl;
cout << "\t\t\t| Editor mit folgenden Funktionen:|" << endl;
cout << "\t\t\t| Copyright Jakob Buchgraber |" << endl;
cout << "\t\t\t-----------------------------------" << endl;
cout << endl;
cout << "Datei einlesen und ausgeben\t\t<1>" << endl;
cout << "Datei erstellen und beschreiben\t\t<2>" << endl;
cout << "Datei erweitern\t\t\t\t<3>" << endl;
cout << "Datei ueberschreiben\t\t\t<4>" << endl;
cout << "Programm beenden\t\t\t<5>" << endl;
cout << endl;
cout << "Ihre Eingabe: ";
cin >> befehl;

switch(befehl)
{
case 1:
cout << endl;
cout << "Datei einlesen und ausgeben" << endl;
read_in();
break;
case 2:
cout << endl;
cout << "Datei erstellen und beschreiben" << endl;
write_in();
break;
case 3:
cout << endl;
cout << "Datei erweitern" << endl;
break;
case 4:
cout << endl;
cout << "Datei überschreiben" << endl;
break;
case 5:
cout << endl;
cout << "Programm beenden" << endl;
break;
default:
cout << endl;
cout << "Ungueltige Eingabe" << endl;
break;
}
return 0;
}
 
Hallo,
nur ein versuch (lange her ;) ) versuchs mal statt mit
cin >> lesen.tmp;
mit
cin >> noskipws >>lesen.tmp:

mfg
Peter
 
das stichwort heißt getline... google sollte einiges dazu finden.

btw: das fflush(stdin); vergisst du bitte mal ganz schnell wieder, das produziert nur undefiniertes verhalten.
 
Also, hier mal meine Ideen:

1. bei "char y;" <-- dh, du kannst nur ein Zeichen einlesen/speichern. Ist ja nicht weiter schlimm, wie man es aus deinem Code entnehmen kann, aber ich würde doch auf 2 oder 3 Zeichen hochschrauben. Weil z.B.: beim Einlesen kann es vorkommen, dass der PC ein /0 (also ein Zeichen-folge-ende) einsetzten will. Und dann geht dein Programm mit einem Buffer-overflow flöten (ist vor allem bei Socket-operationen wichtig,so am rande bemerkt ;) ).
Also statt "char y;" einfach "char y[2];" schreiben, aber den Rest so lassen wie es grad ist.

2. mir sind die << und >> eigentlich nicht geheuer (zu sehr Windows, zu wenige DOS :D). Also ich noch jung war (lange her ;)) habe ich solche operationen noch mit printf() und scanf() gelernt. Aber jedem das seine ;)

3. Zu deiner Frage: Lastwebpage hat recht. So wird es (zu 99,5%) funktionieren...

Naja, hoffe ich konnte ein wenige weiterhelfen
MfG
Mobius
 
2. mir sind die << und >> eigentlich nicht geheuer (zu sehr Windows, zu wenige DOS ). Also ich noch jung war (lange her ) habe ich solche operationen noch mit printf() und scanf() gelernt. Aber jedem das seine
das hat mit windows oder dos rein gar nichts zu tun. das eine ist standard c, das andere standard c++ und letzteres wird offensichtlich vom op benutzt. nochdazu sind die "<<" und ">>" wesentlich einfacher in der anwendung und bei weitem nicht so fehleranfällig wie die alten c funktionen.

nochmal zu 1.: prinzipiell richtig, doch wenn ein string gespeichert werden soll, dann auch einen string nehmen (also std::string, oder zur noch auch ein char-array, das auch wirklich groß genug ist! auch mit 2 zeichen wird man da nicht weit kommen). und das ist eigentlich immer wichtig, nicht nur bei socket-operationen.
 
Zurück
Oben