Datei durch Variable benennen
-
Servus erstmal!
Dieses Forum wurde mir empfohlen, da man hier ziemlich schnell antworten bekommt.
Zu meinem Problem:
Ich möchte ein URL/Mail Speicherprogramm schreiben.
Nun sitze ich auf dem Schlauch.
Ich möchte, dass der User seine URL eingeben kann.
Kein Problem, jedoch kann die URL ja unbestimmt groß sein.
Und wie kann ich dem User nun die Freiheit geben, eine unendlich lange URL zu schreiben (unenedlich ist übertrieben...).Hier mein Code:
int url()
{cout<<"\nInteressengebiet der URL:\"
cin >> interesseurl;// Bis hier ist alles klar....
cout<<"\n\nDie URL:\n";
//doch hier soll jetzt die Eingabe durch den User erfolgen, die unbestimmt lang
//sein kann.return main();
}Danke
-
Habe einfach folgendes geschrieben:
char eurl[60];
....
....
....int url()
{cout<<"\nInteressengebiet der URL:\n";
cin >> interesseURL;cout<<"\n\nDie URL:\n";
cin>>eurl;return main();
}
*Nun möchte ich das in eine Datei speichern.
Ich weiß, da steht was in der FAQ, aber ich blick da nciht durch.
Könnte jemand mir mal genau erklären, was ich da nun machen muss?Die URL soll in eine Textdatei Namens Interessengebiet (vorher vom User festgelegt) in den gleichen Ordner wie das Programm gespeichert werden.
Dann habe ich aber keine Ahnung, wie das ist, wenn man jetzt wieder was abspeichert, aber die gleiche Interesse angibt und der das dann wieder in diese Datei schreibt.
Dann wird ja eigentlich alles gelöscht.
Aber das wollte ich umgtehen, dass wenn man die Datei dann im Programm öffnet alle URLS zu dem Interessengebiet angezeigt werden.Könnte mir da jemand helfen?
Danke schonmal im Vorraus!
-
Also als erstes könntest du statt char einen string nehmen, dann ist das auch mit der länge der URL usw kein Problem mehr
Und was die Datei-Probs angeht, sag mal wo genau du nicht durchsteigst. Hast du schon versucht das ganze zu coden??
-
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;