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...
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).
-
Ich habes jetzt wie folgt gemacht (msdn sei dank):
ofstream yourfile ("Url.txt", ios::app); yourfile << interesseURL <<endl << eurl << endl;
Nun sitze ich noch an dem Problem, dass der nun bei interesseURL nur ein Wort einliest und wenn man 2 Wörter in den String eingibt, dass er dann die Frage nach der URL überspringt.
Abspeichern tut er aber trotzdem.void url() { cout<<"\nInteressengebiet der URL:\n"; cin>>interesseURL; //Geb ich hier 2 Wörter ein, z.B. Meine Homepage, dann... cout<<"\n\nDie URL:\n"; cin>>eurl; //Überspringt er hier einfach die Frage... ofstream yourfile ("Url.txt", ios::app); yourfile << interesseURL <<endl << eurl << endl; //und schreibt logischerweiße auch nix in die Datei main(); }
Kann mir da einer helfen?
-
@ cd9000
Ja, das hatte ich schon am Anfang, hat aber nicht geklappt.Also der hat da eine neue Datei gemacht.
Jetzt habe ich eigentlich alles soweit.
Jetzt fehlt halt nur noch das Suchscript.
Also der soll halt das Wort in der TXT suchen.
Ich würde sagen, dass man die ganze TXT in einen String einliest und in dem String nach dem Wort sucht.
Dann irgendwie das ausgibt.
Prob:
Es muss ja auch irgendwie die URL ausgegeben werden.Weiß jemand, wie man das machenn könnte?
Ich hatte ja vorerst die Idee mit dem Dateinamen.
Aber das entpuppte sich als große Arbeit und so hab ichs jetzt in eine Datei verfrachtet.So viel ich weiß geht das mit strstr.
Aber wie müsste ich das dann schreiben?Es soll ja im Moment nur den Namen suchen.
Also der speichert die eingegebene URL + Info(interesseURL) in die TXT-Datei wie folgt:
--------------------------------
Name/Info(interesseURL)URL(eurl)
--------------------------------Im Moment soll er nur den Namen/Info (interesseURL) in der TXT Datei finden.
Das ist im Moment das wichtigste.Man könnte dochauch machen, dass der, wenn man z.B. die Info REAL_GAMESTUDIO sucht dannn alles durchscuht, bis er diese Zeichenfolge findet.
Danach dann alles ausgibt, bis ein ------ erscheint (da ja das aufschreiben in die TXT Name/info
URL
-----------------------ist oder?
Wäre doch eine Möglichkeit.
-
Reyman schrieb:
Wie gesagt, bin ein N00b!!!
dann hör doch bitte auf bashar und cd und alle anderen, und hör auf, die main funktion aufzurufen.
-
Ja wie gesagt, ich habe keinen Plan, wie ich eine Schleife in mein Programm einbaue.
Kann mir da jemand helfen?
Und zu der einen Sache mit dem Return habe ich ja jetzt auch gelöst.
2. Ich habe ja auch jetzt das mit dem int main usw. durch void main ersetzt.
-
Also nochmal zum mitschreiben
die main-Funktion sollte immer wie folgt aussehn:
//int argv, char** argc müssen nicht unbedingt da sein int main(int argv, char** agrc) { return 0; }
zu deinem Problem
int main(int argv, char** agrc) { char c = ' '; cin>>c; while(c != 'n') { //hier dann dein switch code switch() {} cin>>c; }; return 0; }
Das ist eigentlich schon alles. So wie du es jetzt machst, arbeitest du rekursiv, d.h. du rufst deine Funktionen nochmals auf, obwohl sie noch nicht beendet sind.
Auf die Dauer frisst das ganz schön Resourcen!
-
Reyman schrieb:
2. Ich habe ja auch jetzt das mit dem int main usw. durch void main ersetzt.
Nochmal explizit:
Nimm int main und nicht void main!Ich würde eher eine do..while- anstelle einer while-Schleife nehmen, wenn du es so machen willst.
int main() { char c = 0; do { // hier dann dein switch code switch() {} cout << "Weitermachen? [j/n] "; cin >> c; } while(c != 'n'); return 0; }