string problem (mehrere Wörte einlesen)
-
nee, umgekehrt...mit + nicht und mit += funkt. es
danke euch!
-
dragonball-l schrieb:
nee, umgekehrt...mit + nicht und mit += funkt. es
danke euch!
Hätte mich auch gewundert.
-
genau umgekehrt,
jetzt läuft es
danke euch!
-
also bei lag es daran das ich es in einer funktion laufen lies...was muß ich ändern damit es da auch klappt?
-
-
bitte mal frage etwas genauer stellen bitte!
-
sobald der code so aussieht klappt es nicht mehr
int main (int argc, char* argv[])
{
funktion();
return 0;
}
funktion()
{
string str;
getline(cin,str);
str+=".txt";
const char* chr=str.c_str();
fstream datei(chr,ios::out);
}
-
funktioniert nicht ist keine genügende fehlerbeschreibung!
und nimm bitte code tags!
code
mach mal aus
function()
void function()
-
es wird keine .txt mehr erstellt.
komischer weise nur in meinem Programm. mit dem Beispiel
dragonball-l schrieb:
int main (int argc, char* argv[])
{
funktion();
return 0;
}
funktion()
{
string str;
getline(cin,str);
str+=".txt";
const char* chr=str.c_str();
fstream datei(chr,ios::out);
}klappt es. Hab den Quelltext von meinem Prog. leider nicht auf dem Rechner hier...besorge nach dem Mittag mal um einen USB Stick
-
void funktion(); //prototyp bekanntmachen int main (int argc, char* argv[]) { funktion(); return 0; } void funktion() //rückgabewert angeben { string str; getline(cin,str); str+=".txt"; const char* chr=str.c_str(); fstream datei(chr,ios::out); }
-
so sieht mein Programm aus, die Dateiendung ist in der Mitte in der Funktion DATA_FORMATTING_FILE();
wenn ich das Programm durchlaufen lasse kann ich zwar einen Namen für eine Datei noch angeben aber die Datei selber wird nicht benannt, es wird eine .txt erstellt ohne das ich den Namen angeben kann.
#include <iostream> // IN und Output darzustellen #include <windows.h> // Grafik von Zanare #include<fstream> // Zum Öffnen und anschließendem Einlesen von Daten (Dateneingabe) #include<string> // Zum Einlesen von Strings (für die dll) #include "stplus.h" // Einlesen der Stplusheader mit den Funktionsaufrufen für // die stplus.dll Datei. Falls Sie das Programm neu compilieren // wollen denken Sie daran die Header Datei und die .lib Datei // von Stplus einzubinden. Diese befinden sich auf der Cd in dem // Ordner stplus dll. using namespace std; // Namensbereich zur Verfügnung stellen damit andere Programmierer // Ohne Probleme Ihre Daten mit diesem Programm kombinieren könnnen. void DATA_FORMATTING_FILE(); // Deklaration der Funktion Data_Formating_File void LINE_EXPENDITURE(); // Deklaration der Funktion Line_EXPENDITURE() void stplus(); // Deklaration der Funktion stplus std::string Dateiname_Ausgabe; int main(int argc, char* argv[]) { stplus(); LINE_EXPENDITURE(); // Ausgabeschleife der Werte for (;;) // Endlosschleife damit die Eingabe der Daten (Zanareaufruf) // X mal wiederholt werden kann oder mit n abgebrochen wird. { char Input_Sign; cout << "\nWenn Sie Ihre Berechnungen noch einmal aendern wollen\n"; cout << "geben Sie J (fuer ja) ein, andernfalls N (fuer nein) ein: "; cin >> Input_Sign; if (Input_Sign == 'j' ) { stplus(); LINE_EXPENDITURE(); } if (Input_Sign == 'n' ) { break; } } DATA_FORMATTING_FILE(); // Ausgabeschleife für die neue Datei cout << "\nUm das Programm zu beenden druecken Sie eine Taste..."; getchar(); return 0; } void stplus() { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); // Fenster sichtbar!!! si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOW; //Hide für verstecktes Fenter, Show für offenes Fenster! if(!CreateProcess ( NULL, "wlz.exe", NULL, NULL, false, NULL, NULL, 0, &si, &pi)) printf("Fehler bei der Ausführung"); WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hThread); TOGETHER s; Set(s, 1456); //cout << "Wert = " << Get(s) << endl; //cout << "Hallo, das ist ein Test!!!" <<"\n\n"; } void DATA_FORMATTING_FILE() { // Die Datei wl_zanare.txt wird geöffnet std::ifstream Eingabedatei_zanare("ausgabe\\wl_zanare_ausgabe.txt"); // Meldung das die Datei erfolgreich geöffnet wurde if (Eingabedatei_zanare) { // cout << "\nDie Eingabedatei wl_zanare_ausgabe wurde erfolgreich gelesen...\n"; } // Wenn die Datei wl_zanare.txt nicht geöffnet werden, wird eine Fehler Meldung ausgegeben // und das Programm beendet else { cout << "Die Datei (wl_zanare_3,4x51.txt) kann nicht geoeffnet werden.\n"; cout << "Bitte ueberpruefen Sie ob sich die Datei im Ausgabeverzeichnis befindet\n"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } // Wenn die Eingabedateizanare erfolgreich gelesen // wurde, wird die Ausgabedatei im Ordner ausgabe erzeugt! // Sie wird vom Benuzter benannt und endet // automatisch mit der Endung .txt if(Eingabedatei_zanare) { // alt: Um bei Programmtests nicht jedesmal eine neue // Ausgabedatei eingeben zu müssen nehmen Sie einfach // das // std::ofstream Ausgabe_fuer_beide_Programme("ausbabe\\Ausgabetest.txt"); // weg und setzen dafür vor ***std::string Dateiname;*** // ein /* und nach ***std::ofstream Ausgabe_fuer_beide_Pro // gramme((Dateiname_Ausgabe+".txt").c_str());*** // wieder ein */ zum beenden des Kommentar // std::ofstream Ausgabe_fuer_beide_Programme("ausgabe\\Ausgabetest.txt"); // neu // Um die Ausgabedatei vom Benutzer aus zu bestimmen mit der Endung .txt cout << "Bitte geben Sie einen Namen fuer Ihre Ausgabedatei ein:\t"; getline(cin,Dateiname_Ausgabe); Dateiname_Ausgabe+=".txt"; const char* chr=Dateiname_Ausgabe.c_str(); ofstream Ausgabe_fuer_beide_Programme(chr,ios::out); // std::ofstream Ausgabe_fuer_beide_Programme(("ausgabe\\"+Dateiname_Ausgabe+".txt").c_str()); // Ausgabedatei erfolgreich erstellt if(Ausgabe_fuer_beide_Programme) { cout << "Ausgabedatei erfolgreich erstellt.\n"; } // Wenn die Ausgabedatei nicht erstellt wurde eine Fehlermeldung ausgeben und das Programm beenden else { cout << "Ausgabedatei konnte nicht erstellt werden"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } // Jetzt wird der Inhalt der Ausgabedatei definiert // Zuerst muß die Funktion "Ausgabe_fuer_beide_Programme" // aufgerufen werden. Anschließend der Inhalt der in der Ausgabe- // datei stehen soll. // Inhalt der Datei Eingabedatei_zanare char ch; while (Eingabedatei_zanare.get(ch)) { Ausgabe_fuer_beide_Programme << ch; } Ausgabe_fuer_beide_Programme << "\n\n\n\n\n\n"; // Schließen der Eingabedatei von Zanare Eingabedatei_zanare.close(); // Schließen der Ausgabedatei Ausgabe_fuer_beide_Programme.close(); } // Die Datei fva_ausgabe.txt wird geöffnet und an das Ende // der Ausgabedatei gehängt std::ifstream Eingabedatei_Stplus("ausgabe\\fva_ausgabe.txt"); // Wenn die Datei erfolgreich geöffnet wurde if (Eingabedatei_Stplus) { // cout << "Die Datei (fva_ausgabe.txt) wurde erfolgreich gelesen.\n"; } // Wenn die Datei fva_ausgabe.txt nicht geöffnet werden, wird eine Fehler Meldung ausgegeben else { cout << "Die Datei (fva_ausgabe.txt) kann nicht geoeffnet werden.\n"; cout << "Bitte ueberpruefen Sie ob sich die Datei im Ausgabeverzeichnis befindet\n"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } // cout << " Die Dateiausgabe fuer beide Programme wird im Anhängemodus geöffnet"; std::ofstream Ausgabe_fuer_beide_Programme(("ausgabe\\"+Dateiname_Ausgabe+".txt").c_str(),ios_base::app); if (!Ausgabe_fuer_beide_Programme) { cout << "Es ist nicht möglich die Ausgabedatei für beide Programme zu öffnen"; } char ch; while (Eingabedatei_Stplus.get(ch)) Ausgabe_fuer_beide_Programme << ch; getchar(); } void LINE_EXPENDITURE() { // Falls Sie noch zusätzliche Zeilen aus fva_ausgabe.txt ausgeben wollen, // müssen Sie wie folgt Verfahren // 1.) Zeilen initialisieren // 2.) Einen buffer Character Typ forgeben // 3.) Eine weitere if Schleife zum Lesen der ganzen Zeile erstellen // 4.) Die gewünschte Zeile ausgeben // 1.) Einfach eine weitere Zeile initialisieren über // int zeileX = 343 // Die 343 steht für die Zeile 343 in der Datei fva_ausgabe.txt int zeile1 = 469; int zeile2 = 504; int maxzeilen = zeile2+1; // 2.) Einfach einen weitern bufferX zum Speicherplatz Deklarieren festlegen // char bufferX[100] // Die 100 steht für die Anzahl der ausgegebenen Zeichen in dieser Zeile char dummy[100]; char buffer1[100]; char buffer2[100]; // Öffnen der fva_ausgabe um aus Ihr die Textzeilen zu Lesen ifstream datei("ausgabe\\fva_ausgabe.txt"); // Falls die Datei nicht geöffnet werden kann Fehlermeldung ausgeben if(!datei) { cout << "Die Datei fva_ausgabe konnte nicht gelesen werden...\n"; cout << "Ueberpruefen Sie ob sich die Datei im Verzeichnis Ausgabe befindet...\n"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } for(int i =0; i<maxzeilen; i++) { // 3.) einfach eine weitere if Zeile mit {...} // vor datei.getline schreiben. if( i == (zeile1 -1)) { datei.getline(buffer1,100, '\n'); continue; } if( i == (zeile2 -1)) { datei.getline(buffer2,100, '\n'); continue; } datei.getline(dummy, 100); } // 4.) cout steht zur Ausgabe auf dem Bildschirm, // um eine weiter Ausgabe auf dem Bildschirm // zu erstellen geben Sie einfach // cout << buffer X << endl; // ein, endl oder \n steht für neue Zeile beginnen. // Um eine Ausgabe in einer Datei zu erstellen öffnen // Sie einfach die gewünschte Datei und schreiben anstatt // cout den filestream. cout << endl << buffer1 << "\n"; cout << buffer2 << endl; }
-
ich sags noch einmal, nimm codetags!
Eher schau ich mir das nich an....und wenn du void vor deine function schreibst geht es!
-
habe ich probiert, wie funktioniert das mit den codetags? einfach vor und nachher drauf klicken?!
wenn ich void vor meine funktion DATA_FORMATTING_FILE()
schreibe...kann ich im Programm nix eingeben, als wenn die schleife überhaupt nicht durch laufen wird.
entschuldige ich bin echt nicht so fit!
-
Was ist jetzt das Problem?
Das er nicht einliest oder das er nicht schreibt?
Ich blick langsam nichtmehr durch.
-
the_alien schrieb:
Was ist jetzt das Problem?
Das er nicht einliest oder das er nicht schreibt?
Ich blick langsam nichtmehr durch.ich auch nicht
code tags:
(cpp)
code
[/cpp]die runden klammern oben bitte durch eckige ersetzen!
-
das ich die datei nicht benennen kann...
als ausgabe datei habe ich immer nur
.txt
und keinen namen davor...so wie ich es eigentlich vor hatte.
z.b.: meine datei.txt
-
ich habe den Eindurck als wenn die Zeile
getline(cin,Dateiname_Ausgabe);
die werte nicht übergibt. Kann es sein das da irgendwas mit der Klammersetzung oder dem Öffnen und schließen von Datein nicht paßt?
-
code in codetags, und ich schaus mir an, und helfe!
-
ok ich probiere es...danke euch obwohl ihr mittlerweile verzweifelt...
#include <iostream> // IN und Output darzustellen #include <windows.h> // Grafik von Zanare #include<fstream> // Zum Öffnen und anschließendem Einlesen von Daten (Dateneingabe) #include<string> // Zum Einlesen von Strings (für die dll) #include "stplus.h" // Einlesen der Stplusheader mit den Funktionsaufrufen für // die stplus.dll Datei. Falls Sie das Programm neu compilieren // wollen denken Sie daran die Header Datei und die .lib Datei // von Stplus einzubinden. Diese befinden sich auf der Cd in dem // Ordner stplus dll. using namespace std; // Namensbereich zur Verfügnung stellen damit andere Programmierer // Ohne Probleme Ihre Daten mit diesem Programm kombinieren könnnen. void DATA_FORMATTING_FILE(); // Deklaration der Funktion Data_Formating_File void LINE_EXPENDITURE(); // Deklaration der Funktion Line_EXPENDITURE() void stplus(); // Deklaration der Funktion stplus std::string Dateiname_Ausgabe; int main(int argc, char* argv[]) { stplus(); LINE_EXPENDITURE(); // Ausgabeschleife der Werte for (;;) // Endlosschleife damit die Eingabe der Daten (Zanareaufruf) // X mal wiederholt werden kann oder mit n abgebrochen wird. { char Input_Sign; cout << "\nWenn Sie Ihre Berechnungen noch einmal aendern wollen\n"; cout << "geben Sie J (fuer ja) ein, andernfalls N (fuer nein) ein: "; cin >> Input_Sign; if (Input_Sign == 'j' ) { stplus(); LINE_EXPENDITURE(); } if (Input_Sign == 'n' ) { break; } } DATA_FORMATTING_FILE(); // Ausgabeschleife für die neue Datei cout << "\nUm das Programm zu beenden druecken Sie eine Taste..."; getchar(); return 0; } void stplus() { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); // Fenster sichtbar!!! si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOW; //Hide für verstecktes Fenter, Show für offenes Fenster! if(!CreateProcess ( NULL, "wlz.exe", NULL, NULL, false, NULL, NULL, 0, &si, &pi)) printf("Fehler bei der Ausführung"); WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hThread); TOGETHER s; Set(s, 1456); //cout << "Wert = " << Get(s) << endl; //cout << "Hallo, das ist ein Test!!!" <<"\n\n"; } void DATA_FORMATTING_FILE() { // Die Datei wl_zanare.txt wird geöffnet std::ifstream Eingabedatei_zanare("ausgabe\\wl_zanare_ausgabe.txt"); // Meldung das die Datei erfolgreich geöffnet wurde if (Eingabedatei_zanare) { // cout << "\nDie Eingabedatei wl_zanare_ausgabe wurde erfolgreich gelesen...\n"; } // Wenn die Datei wl_zanare.txt nicht geöffnet werden, wird eine Fehler Meldung ausgegeben // und das Programm beendet else { cout << "Die Datei (wl_zanare_3,4x51.txt) kann nicht geoeffnet werden.\n"; cout << "Bitte ueberpruefen Sie ob sich die Datei im Ausgabeverzeichnis befindet\n"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } // Wenn die Eingabedateizanare erfolgreich gelesen // wurde, wird die Ausgabedatei im Ordner ausgabe erzeugt! // Sie wird vom Benuzter benannt und endet // automatisch mit der Endung .txt if(Eingabedatei_zanare) { // alt: Um bei Programmtests nicht jedesmal eine neue // Ausgabedatei eingeben zu müssen nehmen Sie einfach // das // std::ofstream Ausgabe_fuer_beide_Programme("ausbabe\\Ausgabetest.txt"); // weg und setzen dafür vor ***std::string Dateiname;*** // ein /* und nach ***std::ofstream Ausgabe_fuer_beide_Pro // gramme((Dateiname_Ausgabe+".txt").c_str());*** // wieder ein */ zum beenden des Kommentar // std::ofstream Ausgabe_fuer_beide_Programme("ausgabe\\Ausgabetest.txt"); // neu // Um die Ausgabedatei vom Benutzer aus zu bestimmen mit der Endung .txt cout << "Bitte geben Sie einen Namen fuer Ihre Ausgabedatei ein:\t"; getline(cin,Dateiname_Ausgabe); Dateiname_Ausgabe+=".txt"; const char* chr=Dateiname_Ausgabe.c_str(); ofstream Ausgabe_fuer_beide_Programme(chr,ios::out); // std::ofstream Ausgabe_fuer_beide_Programme(("ausgabe\\"+Dateiname_Ausgabe+".txt").c_str()); // Ausgabedatei erfolgreich erstellt if(Ausgabe_fuer_beide_Programme) { cout << "Ausgabedatei erfolgreich erstellt.\n"; } // Wenn die Ausgabedatei nicht erstellt wurde eine Fehlermeldung ausgeben und das Programm beenden else { cout << "Ausgabedatei konnte nicht erstellt werden"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } // Jetzt wird der Inhalt der Ausgabedatei definiert // Zuerst muß die Funktion "Ausgabe_fuer_beide_Programme" // aufgerufen werden. Anschließend der Inhalt der in der Ausgabe- // datei stehen soll. // Inhalt der Datei Eingabedatei_zanare char ch; while (Eingabedatei_zanare.get(ch)) { Ausgabe_fuer_beide_Programme << ch; } Ausgabe_fuer_beide_Programme << "\n\n\n\n\n\n"; // Schließen der Eingabedatei von Zanare Eingabedatei_zanare.close(); // Schließen der Ausgabedatei Ausgabe_fuer_beide_Programme.close(); } // Die Datei fva_ausgabe.txt wird geöffnet und an das Ende // der Ausgabedatei gehängt std::ifstream Eingabedatei_Stplus("ausgabe\\fva_ausgabe.txt"); // Wenn die Datei erfolgreich geöffnet wurde if (Eingabedatei_Stplus) { // cout << "Die Datei (fva_ausgabe.txt) wurde erfolgreich gelesen.\n"; } // Wenn die Datei fva_ausgabe.txt nicht geöffnet werden, wird eine Fehler Meldung ausgegeben else { cout << "Die Datei (fva_ausgabe.txt) kann nicht geoeffnet werden.\n"; cout << "Bitte ueberpruefen Sie ob sich die Datei im Ausgabeverzeichnis befindet\n"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } // cout << " Die Dateiausgabe fuer beide Programme wird im Anhängemodus geöffnet"; std::ofstream Ausgabe_fuer_beide_Programme(("ausgabe\\"+Dateiname_Ausgabe+".txt").c_str(),ios_base::app); if (!Ausgabe_fuer_beide_Programme) { cout << "Es ist nicht möglich die Ausgabedatei für beide Programme zu öffnen"; } char ch; while (Eingabedatei_Stplus.get(ch)) Ausgabe_fuer_beide_Programme << ch; getchar(); } void LINE_EXPENDITURE() { // Falls Sie noch zusätzliche Zeilen aus fva_ausgabe.txt ausgeben wollen, // müssen Sie wie folgt Verfahren // 1.) Zeilen initialisieren // 2.) Einen buffer Character Typ forgeben // 3.) Eine weitere if Schleife zum Lesen der ganzen Zeile erstellen // 4.) Die gewünschte Zeile ausgeben // 1.) Einfach eine weitere Zeile initialisieren über // int zeileX = 343 // Die 343 steht für die Zeile 343 in der Datei fva_ausgabe.txt int zeile1 = 469; int zeile2 = 504; int maxzeilen = zeile2+1; // 2.) Einfach einen weitern bufferX zum Speicherplatz Deklarieren festlegen // char bufferX[100] // Die 100 steht für die Anzahl der ausgegebenen Zeichen in dieser Zeile char dummy[100]; char buffer1[100]; char buffer2[100]; // Öffnen der fva_ausgabe um aus Ihr die Textzeilen zu Lesen ifstream datei("ausgabe\\fva_ausgabe.txt"); // Falls die Datei nicht geöffnet werden kann Fehlermeldung ausgeben if(!datei) { cout << "Die Datei fva_ausgabe konnte nicht gelesen werden...\n"; cout << "Ueberpruefen Sie ob sich die Datei im Verzeichnis Ausgabe befindet...\n"; cout << "Das Programm wird beendet. Bitte druecken Sie eine Taste."; getchar(); exit(1); } for(int i =0; i<maxzeilen; i++) { // 3.) einfach eine weitere if Zeile mit {...} // vor datei.getline schreiben. if( i == (zeile1 -1)) { datei.getline(buffer1,100, '\n'); continue; } if( i == (zeile2 -1)) { datei.getline(buffer2,100, '\n'); continue; } datei.getline(dummy, 100); } // 4.) cout steht zur Ausgabe auf dem Bildschirm, // um eine weiter Ausgabe auf dem Bildschirm // zu erstellen geben Sie einfach // cout << buffer X << endl; // ein, endl oder \n steht für neue Zeile beginnen. // Um eine Ausgabe in einer Datei zu erstellen öffnen // Sie einfach die gewünschte Datei und schreiben anstatt // cout den filestream. cout << endl << buffer1 << "\n"; cout << buffer2 << endl; }
-
Dateiname_Ausgabe+=".txt"; ofstream Ausgabe_fuer_beide_Programme(Dateiname_Ausgabe.c_str(),ios::out);
Und so gehts nicht?
BTW:
Normalerweise nutzt man entweder einen Unterstrich zur Trennung der Wörter
ausgabe_fuer_beide_programme
oder man schreibt den ersten Buchstaben des neuen Wortes groß
AusgabeFuerBeideProgrammeDas ist besser lesbar.
Ohne die vielen Leerzeilen wäre der Code auch besser lesbar.