C++ Leerzeichen und Buchstaben in Datei schreiben
-
Könnte mir das mit dem write.'dateistream'();
Mal vorzeigen da mein Compiler immer eine Fehlermeldung ausgibt!
Ansonsten vielen Dank für die schnelle hilfe!
-
versuchs mal mit datei.put(char);
-
Bitte vor zeigen!
Kopiert einfach den Source und ändert ihn da mein Compiler immer nur Fehlermeldungen ausgibt!
Außerdem kenne ich die Parameter ja nicht!mfg Jakob Buchgraber
-
Put setzt doch nur ein Zeichen,oder nicht?
ofstream txt("test.txt",ios::out); char name[1025]; cin>>name; txt.write(name,1024); txt.close;
Ich hoffe das hilft.
-
also ich hätte es so gemacht:
struct ...{ . char tmp[256]; . }; .... 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; return 1; } cout << "Text eingeben: "; cin.getline(lesen.tmp, 256); for(int i = 0; i < sizeof(lesen.tmp); i++) dateiname.put(lesen.tmp[i]); return lesen; }
Du siehst es liegt nicht am schreiben sondern am lesen mit cin. cin deutet jedes leerzeichen als ende der eingabe, der rest bleibt im puffer.
-
Hallo erst mal. ich bin auch ein ganz lausiger anfänger.
wie müsste dann das ganze richtig aussehen?mfg. smista
-
öhm ... steht doch einen Beitrag weiter oben
-
nein ich meine von anfang an. das ist ja nur ein teil.
mfg. smista
-
najut habs nochmal so geschrieben wie ichs gemacht hätte:
#include <iostream> #include <fstream> #include <conio.h> using namespace std; struct editor { char x[256]; char tmp[256]; char y; }; short read_in() { ifstream dat_ein; editor einlesen; int i; cout << endl; cout << "Geben Sie den Namen\\Pfad zur Datei ein: "; cin >> einlesen.x; cout << endl; dat_ein.open(einlesen.x, ios::in | ios::binary); if(!dat_ein) { cout << "Datei konnte nicht geöffnet werden: " << endl; cout << endl; return 1; } dat_ein.get(einlesen.y); while(!dat_ein.eof()) { cout << einlesen.y; dat_ein.get(einlesen.y); } dat_ein.close(); return 0; } short write_in() { ofstream datei_aus; editor lesen; int pos = 0; char c; cout << endl; cout << "Geben Sie den Pfad an in dem Sie die Datei anlegen wollen: "; cin >> lesen.x; cout << endl; datei_aus.open(lesen.x, ios::out | ios::binary ); if(!datei_aus) { cout << "Datei kann nicht angelegt werden," << endl; cout << "bzw. der Pfad >> " << lesen.x << " << existiert nicht!" << endl; return 1; } cout << "Text eingeben: "; c=getche(); //der "Nachteil" von getche() ist das auch Backspaces etc eingelesen werden while(c!=13) { if (c > 31) lesen.tmp[pos++]=c; // deswegen diese if Bedingung else if ( c == 8) pos-=1; // wenn Backspace muß die voherige Position überschrieben werden c=getche(); } lesen.tmp[pos]='\0'; pos=0; cout << "\n\n Text wird in Datei geschrieben!\n\n\n"; for(int i = 0; i < strlen(lesen.tmp); i++) datei_aus.put(lesen.tmp[i]); datei_aus.close(); return 0; } int main() { int befehl = 1, indikator; cout << "\t\t\t-----------------------------------" << endl; cout << "\t\t\t| Editor mit folgenden Funktionen:|" << endl; cout << "\t\t\t| Copyright Anonym |" << endl; cout << "\t\t\t-----------------------------------" << endl; cout << endl; while(befehl) { 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; indikator = read_in(); break; case 2: cout << endl; cout << "Datei erstellen und beschreiben" << endl; indikator = 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; } if(indikator == 1) cout << "\nEin Fehler ist aufgetreten!\n\n"; cout << "Erneut einen Befehel ausführen? Wenn ja 1, ansonsten 0 eintippen:"; cin >> befehl; cout << "\n\n\n"; } return 0; }
mfg nob
edit:
anstatt vonc=getche(); //der "Nachteil" von getche() ist das auch Backspaces etc eingelesen werden while(c!=13) { if (c > 31) lesen.tmp[pos++]=c; // deswegen diese if Bedingung else if ( c == 8) pos-=1; // wenn Backspace muß die voherige Position überschrieben werden c=getche(); } lesen.tmp[pos]='\0'; pos=0;
kann man auch
cin.seekg(0,std::ios::end); cin.clear(); cin.getline(lesen.tmp, 256); cin.seekg(0,std::ios::end); cin.clear();
schreiben was wahrscheinlich Laufzeit und Speicher einspart
-
D A N K E ! !
Jetzt funktioniert es.
mfg jakob buchgraber