Datei durch Variable benennen
-
Das mit dem Char ist aber jetzt doch nicht mehr so großes Problem, größer als 60 Zeichen sind die URLs sowieso nicht...
Noch zur Info, ich programmiere das in Win32 Konsole.
Also, so sieht derzeit mein Code aus:#include <iostream> #include <string> #include <fstream> using namespace std; char eurl[60]; char frage; int einlesen(); int mail(); int url(); int schritt1(); char abfrage; char interesseURL[20]; int main() { cout<<"URL- und Mail-Adressen Speicher (for go on, press ENTER)"<<endl; cout<<"\n\nSchon gespeicherte URLs / MAILs einsehen? (y/n)\n\n"; cin>>frage; switch(frage) //Frage Y/N einsehen oder einschreiben?? { //************************************** case 'y': case 'Y': return einlesen(); break; case 'N' : case 'n' : cout<<"\nGehe zum Speicher-Menue\n"; return schritt1(); break; default: cout<<"\n\nAktion abgebrochen\n\n"; return main(); break; } cin.get(); return schritt1(); } //****************************************************** //****************************************************** //DATENSPEICHER ABFRAGE int schritt1() { cout<<"\nWas moechten Sie speichern?\n"; cout<<"Bitte geben Sie\n\tU fuer Homepageadresse \n\tM fuer Mailadresse \nein." << endl; cin >> abfrage; switch(abfrage) { case 'U' : cout<<"URL"; return url(); break; case 'M' : cout<<"MAIL"; return mail(); break; default: cout<<"Aktion abgebrochen\n"; return main(); break; } cin.get(); return 0; } //******************************************* //******************************************* //URL SPEICHERN int url() { cout<<"\nInteressengebiet der URL:\n"; cin >> interesseURL; cout<<"\n\nDie URL:\n"; cin>>eurl; return main(); } //******************************************* //******************************************* //MAIL SPEICHERN int mail() { return main(); } //******************************************* //******************************************* //DATEN EINLESEN int einlesen() { return main(); }
Hier fehlt natürlich noch sehr viel.
Also, wie man dem Code entnehmen kann, wird der User gefragt, ob er eine mail/URL eintragen will.
Nun trägt der halt die Interesse ein, die später als Dateiname genommen werden soll.
Danach kommt die URL, die in die Datei Namens >Interesse< eingetragen wird.Das weiß ich schonmal garnicht, wie ich das machen soll.
Danach soll dem User möglich sein, in diese Datei Namens dieser Interesse nochmal etwas einzutragen.
Also nochmal mehrere URLs.Jedoch, wie mache ich das?
Die Datei dürf ja nicht ersetzt werden.
Und wenn ich das mit dem neu machen entferne, macht er das erste Mal keine Datei neu...Dann ist noch das mit dem Aufrufen.
Am Anfang soll der User, wenn er Y eingegeben hat, die URLS sehen können.
Aber vorerst soll er sagen, welche Interesse er will.
So wird dann einfach, wenn es eine TXT-Datei ist die Datei mit diesem Namen per variabel davor gebeamt...
Weiß nicht, ob es geht....
-
Reyman schrieb:
int main() { return schritt1(); } int schritt1() { return main(); break; }
Ähm stop an dieser Stelle. Sowas ist Unsinn. Geh mal tief in dich und rekapitulier nochmal Funktionen und die return-Anweisung. Oder noch tiefer wenns sein muß.
-
?!? steht da nicht return 0; ?
Achso, ich habs jetzt hinbekommen eine Datei anzulegen.
Nur weiß ich nciht, wie ich in die reinschreib.Kann mir da jemand helfen?
EDIT
default:
cout<<"Aktion abgebrochen\n";
return main();
break;}
Das ist aber nur, wenn die Aktion abgebrochen wurde, da soll er nochmal von oben anfangen...
-
Da bin ich ganz Sunday's Meinung.
Was die URL-Eintragung angeht, lass die Datei einfach offen, so lange der User nicht das Programm nicht beenden will. Wenn er das dann letztlich tun will, kannst du die Datei schließen. Wie das ganze funktioniert, steht,wie du schon gesehn hast, in der FAQ. Versuch erst mal dich da reinzuarbeiten und dann, bei konkreteren Problemen, helfen wir dir weiter
-
Ahhh ich habs hinbekommen!!!
Nur wie mach ich das mit dem Dateiname ?So siehts jetzt bei mir aus:
int url() { cout<<"\nInteressengebiet der URL:\n"; cin >> interesseURL; cout<<"\n\nDie URL:\n"; cin>>eurl; ofstream yourfile ("neu.txt"); yourfile << interesseURL << eurl << endl; return main(); }
Nur noch paar Schöhnheitssachen ändern...
-
hmm wie geht das nun mit dem Namen?
-
Reyman schrieb:
?!? steht da nicht return 0; ?
Nein. Das steht an anderer Stelle, aber die mein ich nicht.
-
einfach ne char - Variable anlegen die vorher gefüllt wird und dann einfach an ofstream(deineVariable) übergeben
-
Also eigentlich:
[ccp]
int url()
{cout<<"\nInteressengebiet der URL:\n";
cin >> interesseURL;cout<<"\n\nDie URL:\n";
cin>>eurl;ofstream yourfile ("interesseURL.txt");
yourfile << interesseURL << eurl << endl;return main();
}[/ccp]
Aber es geht nicht....
WIrklich, bin ein Noob und das in der FAQ, da steht das nciht genau mit den Namen....@ Bashar
Das mit dem Return, der MUSS ja zu main() zurück gehen, da ich nciht das Programm beenden will, nur weil er sich mit dem Buchstaben vertan hat....
-
Reyman schrieb:
Das mit dem Return, der MUSS ja zu main() zurück gehen, da ich nciht das Programm beenden will, nur weil er sich mit dem Buchstaben vertan hat....
Dein Auffassung, man müsse bei return angeben, wohin die Funktion zurückkehren soll, ist Unsinn. Bitte tu was ich dir geraten habe.
-
wieso?
Und bitte helft mir mit dem Namen
habe jetzt schon:
(interesseURL + ".txt") geschrieben, geht aber nicht sagt er:
cannot add two pointersok, plus strcpy
-
Das mit dem Char ist aber jetzt doch nicht mehr so großes Problem, größer als 60 Zeichen sind die URLs sowieso nicht...
Genau. Und Daten brauchen nur zwei Stellen. Blöder Jahrtausendwechsel.
Oder genau: Und nachdem seine Festplatte formatiert wurde, er ein drei Jahre altes Backup wieder aufgespielt hatte, stellte er fest, dass fehlende Eingabeüberprüfungen leicht ausgenutzt werden können.Also wenn du schon so eine zweifelhafte Annahme machst, dann mach sie erstens explizit und zweitens sorge dafür, dass sie eingehalten wird.
Ich für meinen Teil würde ja dann doch eher zu einem std::string raten.
-
habe ich gemacht....
Nun wie geht das nun mit dem Namen?
-
char Interesse[31]; //füllen von Interesse cin>>Interesse //Datei anlegen, fertig. ofstream yourfile(Interesse);
Zu den returns. Lies am besten mal ein paar Tutorials. Weil das hier
int URL() { return main(); }
gibt keinen. Entweder du gibst einen Integer-Wert zurück oder du schreibst void statt int. So sparst du dir den Rückgabewert (also das return)
üblicherweise sieht ein return wie folgt aus
int main(int argv, char** argv) { //So sollte ein return aussehn, auch in deinen Funktionen return 0; }
Wenn du willst das das Programm weiterläuft, bau ne Schleife in dein Hauptprogramm ein, die so lange läuft bis der Benutzter will das das Prog endet.
-
Hab jetzt follgendes (wegen der überlastung des stacks ) geschrieben:
#include <iostream> #include <string> #include <fstream> using namespace std; string eurl; char frage; void einlesen(); void mail(); void url(); void schritt1(); char abfrage; string interesseURL; void main() { cout<<"URL- und Mail-Adressen Speicher (for go on, press ENTER)"<<endl; cout<<"\n\nSchon gespeicherte URLs / MAILs einsehen? (y/n)\n\n"; cin>>frage; switch(frage) //Frage Y/N einsehen oder einschreiben?? { //************************************** case 'y': case 'Y': einlesen(); break; case 'N' : case 'n' : cout<<"\nGehe zum Speicher-Menue\n"; schritt1(); break; default: cout<<"\n\nAktion abgebrochen\n\n"; main(); break; } cin.get(); schritt1(); } //****************************************************** //****************************************************** //DATENSPEICHER ABFRAGE void schritt1() { cout<<"\nWas moechten Sie speichern?\n"; cout<<"Bitte geben Sie\n\tU fuer Homepageadresse \n\tM fuer Mailadresse \nein." << endl; cin >> abfrage; switch(abfrage) { case 'U' : cout<<"URL"; url(); break; case 'M' : cout<<"MAIL"; mail(); break; default: cout<<"Aktion abgebrochen\n"; main(); break; } cin.get(); } //******************************************* //******************************************* //URL SPEICHERN void url() { cout<<"\nInteressengebiet der URL:\n"; cin >> interesseURL; cout<<"\n\nDie URL:\n"; cin>>eurl; ofstream yourfile (interesseURL+".txt"); yourfile << interesseURL << eurl << endl; main(); } //******************************************* //******************************************* //MAIL SPEICHERN void mail() { main(); } //******************************************* //******************************************* //DATEN EINLESEN void einlesen() { main(); }
Nun sagt er noch eine Fehlermeldung wegen dem "addieren" der 2 strings.
Was soll ich da nun machen?
EDIT
Habe ein paar unnütze sachen entfernt
-
So siehts jetzt aus:
#include <iostream> #include <string> #include <fstream> using namespace std; string eurl; char frage; void einlesen(); void mail(); void url(); void schritt1(); char abfrage; string interesseURL; void main() { cout<<"URL- und Mail-Adressen Speicher (for go on, press ENTER)"<<endl; cout<<"\n\nSchon gespeicherte URLs / MAILs einsehen? (y/n)\n\n"; cin>>frage; switch(frage) //Frage Y/N einsehen oder einschreiben?? { //************************************** case 'y': case 'Y': einlesen(); break; case 'N' : case 'n' : cout<<"\nGehe zum Speicher-Menue\n"; schritt1(); break; default: cout<<"\n\nAktion abgebrochen\n\n"; main(); break; } } //****************************************************** //****************************************************** //DATENSPEICHER ABFRAGE void schritt1() { cout<<"\nWas moechten Sie speichern?\n"; cout<<"Bitte geben Sie\n\tU fuer Homepageadresse \n\tM fuer Mailadresse \nein." << endl; cin >> abfrage; switch(abfrage) { case 'U' : cout<<"URL"; url(); break; case 'M' : cout<<"MAIL"; mail(); break; default: cout<<"Aktion abgebrochen\n"; main(); break; } } //******************************************* //******************************************* //URL SPEICHERN void url() { cout<<"\nInteressengebiet der URL:\n"; cin >> interesseURL; cout<<"\n\nDie URL:\n"; cin>>eurl; ofstream yourfile (interesseURL+".txt"); yourfile << interesseURL << eurl << endl; main(); } //******************************************* //******************************************* //MAIL SPEICHERN void mail() { main(); } //******************************************* //******************************************* //DATEN EINLESEN void einlesen() { main(); }
-
1. Ruf nicht main() auf! Nirgends! In keiner deiner Funktionen. Benutz eine Schleife innerhalb von main().
2. Warum machst du hunderte von Leerzeilen in dein Programm?
3. Mach nicht alle Variablen global. Gewöhn dir an, keine einzige global zu deklarieren.
4. Überleg dir nochmal ganz genau, was welche Funktion machen soll. Und benenn sie entsprechend.
-
5. Schreib die genaue Fehlermeldung hin. "Das klappt nicht" hilft niemandem.
6. Wie willst du die URL und das Interessensgebiet denn jemals wieder trennen, wenn du das direkt hintereinander speicherst? Du musst die beiden Variablen schon irgendwie voneinander getrennt speichern, z.B. so:yourfile << interesseURL << endl << eurl << endl;
-
Ist ja gut !
Wie gesagt, bin ein N00b!!!Also, ich habs jetzt so gelöst, dass ich einfach nur eine Datei schon da ist und die dann immer öffne und dann was reinschreibe und schließe.
WIe heißt davon der Befhel, also vom öffnen + reinschreiben und schließen?
Vielen Dank, für die Mühe, die ihr euch gemacht habt mir zu helfen
-
Das hast du doch schon gehabt, oder?
{ ofstream Datei("DateiName.txt"); Datei << "Das hier wird reingeschrieben" << endl; }
Geschlossen wird die Datei automatisch am Ende der Funktion (-> Destruktor).