Warum geht mein Programm nicht :( ?
-
SO Halli Hallo ich möchte einen Namensgenerator schreiben. Das ganze soll so funktionieren:
es werden 3 datein eingelesen und dann werden zufallszahlen ermittelt die die zeilen im txt dokument angeben. Ich deke es ist ein relativ simples programm nur ich scheitere momentan am ein lesen da es eine lange namesliste ist denke ich ist es sinnvoll den string in einem vector zu speichern aber er machts einfach net und ich weiss net warum das hier ist mein bisheriger code:#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <stdio.h> #include <vector> #include <string> //#inlcude <stdlib> using namespace std; double dateigroesse; ifstream testdatei; string names; vector<string> puffer; void dateioeffnen () { //variable für die zu öffnende Datei testdatei.open ("c:\\test.txt", ifstream::in); // sequenz für das öffnen der datei if (0==testdatei) { cout << "Fehlerhafte Datein benachrichtigen Sie den Administrator" << endl; } else { cout << "Datei erfolgreich geoeffnet"<<endl; } } void dateilesen() { dateioeffnen(); while(testdatei.good()) { getline(testdatei, names, ';'); puffer.push_back(testdatei); } } int main(int argc, char *argv[]) { dateilesen(); system("PAUSE"); return EXIT_SUCCESS; } /*for ( i = 0 ; i <= random; i++ ) { if (i < random) { code für durch die textdatei gehen zeile für zeile } else { zeile zwischenspeichern bzw. in neue datei schreiben} } */und das sind die Fehlermeldungen :
40 D:\Users\Arbeitsdatein\T.SID53s\Namensgenerator\namensgenerator 3.cpp no matching function for call to `std::vector<std::string, std::allocator<std::string> >::push_back(std::ifstream&)' note C:\nonbku\Dev-Cpp\include\c++\3.4.2\bits\stl_vector.h:557 candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = std::string, _Alloc = std::allocator<std::string>]hoffe ihr könnt mir sagen was ich dagegen machen kann ich entwickle auf der IDE Bloodshed Dev-C++ ich sag scon mal danke im voraus.
LG
Barti
-
puffer.push_back(testdatei);
->
puffer.push_back(names);
-
hey super danke
habe aber auch schon das nächste problem ...
will jet ne random funktion schreiben und die um die schleife legen wie kann ich die zeilenanzahl auslesen aus dem vector ?so siehts momentan aus
srand (time(NULL)); for (int x=1;x<=6;x++) { cout << rand()%49 << endl; }da wo die 49 jetzt is soll die Zeilenanzahl hin.
Danke schon mal für antwort
Lg
Bart
-
Hier ist die Doku zu std::vector:
http://www.cplusplus.com/reference/stl/vector/
Solltest du dir bookmarken, denn da sind alle std-C++-Sachen dokumentiert.
-
Die Anzahl der Elemente eines std::vector kriegst du mit der Methode size(). Das kannst du auch alles in der Doku finden.
-
Hmm also jetzt geht soweit alles hier mal der Komplette Quellcode :
#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <stdio.h> #include <vector> #include <string> #include <fcntl.h> #include <io.h> //#include <sys.h> //#inlcude <stdlib> using namespace std; ifstream testdatei; string names; vector<string> puffer; int newtext; void dateioeffnen () { testdatei.open ("c:\\test.txt", ifstream::in); //variable für die zu öffnende Datei if (0==testdatei) // sequenz für das öffnen der datei { cout << "Fehlerhafte Datein benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung } else { cout << "Datei erfolgreich geoeffnet"<<endl; } } void dateilesen() { dateioeffnen(); while(testdatei.good()) { //while schleife liest datei zeile für zeile aus getline(testdatei, names, ';'); // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien) puffer.push_back(names); //ausgelesene datein in vector schreiben cout << names << endl; // vector ausgabe } } void random () //random funktion zum generien der zu schreibenden zeilen { srand (time(NULL)); for (int x=1;x<=10;x++) // festlung der anzahl der zu generienden namen { rand()%puffer.size(); // Zahlen berreich festlegung } } void dateierstellen() { if((newtext = open ("c:\\newtext.txt", O_WRONLY|O_CREAT)) !-1 ; } int main(int argc, char *argv[]) { dateilesen(); //random(); dateierstellen(); system("PAUSE"); return EXIT_SUCCESS; } /*for ( i = 0 ; i <= random; i++ ) { if (i < random) { code für durch die textdatei gehen zeile für zeile } else { zeile zwischenspeichern bzw. in neue datei schreiben} } */nun habe ich nen problem bei datei erstellen
void dateierstellen() { if((newtext = open ("c:\\newtext.txt", O_WRONLY|O_CREAT)) !-1 ; }wo liegt das problem die fehler meldung ist:
`)' before '!' tokenaber ich seh nicht wo ich nen token vergessen ahben könnte seht ihr was was mir net auffält ?
LG
Barti
-
Eine öffnende Klammer zu viel - direkt hinter if((...
bzw. eine zu wenig vor ;
Wobei beides wenig Sinn macht.
-
Was ist "!-1"?
-
l'abra d'or schrieb:
Was ist "!-1"?

Sollte wahrscheinlich !=-1 oder so werden...
-
Warum die C-Header in überwiegend C++ Quellcode?
Warum Header doppelt?
Warum "dateierstellen()" im C-stil und nicht in C++?MfG f.-th.
-
weil ich es net anders kann und wir nix anderes in der berufschule lernen

Mfg
Barti
-
Hmm Leute ich komm nicht weiter
Ich habe es soweit hinbekommen das die datei sich öffnet das die datei gelesen wird und in einen vector geschrieben wird ich lasse zufalls zahlen generieren die in eine variable gepackt werden und auch eine dazu passende csv.datei wird erstellt. Aber ich weiss net wie ich die strings jetzt wieder aus der dem vector raus kriege und in eine csv datei schreibe, könnt ihr mir nen tipp geben wie ich sowas am besten angehe oder wo ich nach lesen kann wie sowas geht.Das ist der momentane code:#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <stdio.h> #include <vector> #include <string> #include <fcntl.h> #include <io.h> //#include <sys.h> //#inlcude <stdlib> using namespace std; ifstream testdatei; string names; vector<string> puffer; int newtext; int anzahl; int i; int randomzahlen; string generate; void dateioeffnen () { testdatei.open ("c:\\test.txt", ifstream::in); //variable für die zu öffnende Datei if (0==testdatei) // sequenz für das öffnen der datei { cout << "Fehlerhafte Datein benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung } else { cout << "Datei erfolgreich geoeffnet"<<endl; } } void dateilesen() { //dateioeffnen(); while(testdatei.good()) { //while schleife liest datei zeile für zeile aus getline(testdatei, names, ';'); // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien) puffer.push_back(names); //ausgelesene datein in vector schreiben //cout << names << endl; // vector ausgabe } } void random () //random funktion zum generien der zu schreibenden zeilen { cout << "Bitte geben Sie die Anzahl der zu generierenden Namen ein." << endl; cin >> anzahl; cout << "Die " << anzahl << " Namen werden generiert." << endl; srand (time(NULL)); for (int x=1;x<=anzahl;x++) // festlung der anzahl der zu generienden namen { randomzahlen = rand()%puffer.size(); // Zahlen berreich festlegung cout << randomzahlen << endl; } } void dateierstellen() { if(newtext = open ("c:\\generate.csv", O_WRONLY|O_CREAT)) !-1 ; ifstream LogFile("c:\\generate.csv"); if(LogFile) cout << "Datei wurde erstellt bitte bennen Sie Die Datei um" << endl; } void generieren() { for ( i = 0 ; i <= randomzahlen; i++ ) { if (i < randomzahlen) { dateilesen(); } else { newtext << names; cout << newtext << endl; } } } int main(int argc, char *argv[]) { dateioeffnen(); dateilesen(); random(); dateierstellen(); generieren(); system("PAUSE"); return EXIT_SUCCESS; } /*for ( i = 0 ; i <= random; i++ ) { if (i < random) { code für durch die textdatei gehen zeile für zeile } else { zeile zwischenspeichern bzw. in neue datei schreiben} } */
-
Hallo,
Lies dir bitte auch mal diesen Artikel aus der FAQ durch
Ströme und Dateien in C++
-
ok ich habe jetzt alles soweit hinbekommen wie es auch funktionieren soll nun habe ich das nächste Problem mit der csv schreiben es funktioniert wunderbar nur ich komme net in die zweite spalte rein.
#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <stdio.h> #include <vector> #include <string> #include <fcntl.h> #include <io.h> //#include <sys.h> //#inlcude <stdlib> using namespace std; ifstream testdatei; ifstream testdatei2; string names; string names2; vector<string> puffer; vector<string> puffer2; int newtext; int anzahl; int i; vector<int> randomzahlen; vector<int> randomzahlen2; string generate; void dateioeffnen () { testdatei.open ("test.txt", ifstream::in); //variable für die zu öffnende Datei if (0==testdatei) // sequenz für das öffnen der datei { cout << "Erste Datei Fehlerhaft benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung } else { cout << "Erste Datei erfolgreich geoeffnet"<<endl; } } void dateioeffnen2 () { testdatei2.open ("test2.txt", ifstream::in); //variable für die zu öffnende Datei if (0==testdatei2) // sequenz für das öffnen der datei { cout << "Zweite Datei Fehlerhafte benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung } else { cout << "Zweite Datei erfolgreich geoeffnet"<<endl; } } void dateilesen() { //dateioeffnen(); while(testdatei.good()) { //while schleife liest datei zeile für zeile aus getline(testdatei, names, ';'); // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien) puffer.push_back(names); //ausgelesene datein in vector schreiben //cout << names << endl; // vector ausgabe } } void dateilesen2() { //dateioeffnen(); while(testdatei2.good()) { //while schleife liest datei zeile für zeile aus getline(testdatei2, names2, ';'); // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien) puffer2.push_back(names2); //ausgelesene datein in vector schreiben //cout << names << endl; // vector ausgabe } } void random () //random funktion zum generien der zu schreibenden zeilen { cout << "Bitte geben Sie die Anzahl der zu generierenden Namen ein." << endl; cin >> anzahl; cout << "Die " << anzahl << " Namen werden generiert." << endl; srand (time(NULL)); for (int x=0;x<anzahl;x++) // festlung der anzahl der zu generienden namen { randomzahlen.push_back(rand()%puffer.size()); // Zahlen berreich festlegung cout << randomzahlen.at(x) << endl; } for (int i=0;i<anzahl;i++) // festlung der anzahl der zu generienden namen { randomzahlen2.push_back(rand()%puffer2.size()); // Zahlen berreich festlegung cout << randomzahlen2.at(i) << endl; } } /*void dateierstellen() { if(newtext = open ("c:\\generate.csv", O_WRONLY|O_CREAT)) !-1 ; ifstream LogFile("c:\\generate.csv"); if(LogFile) cout << "Datei wurde erstellt bitte bennen Sie Die Datei um" << endl; } */ void generieren() { fstream d; d.open("generate.csv", ios::out); for ( int x = 0; x < anzahl; x++) d << puffer.at(randomzahlen.at(x)) + puffer2.at(randomzahlen2.at(x)) ; d.close(); } int main(int argc, char *argv[]) { dateioeffnen(); dateioeffnen2(); dateilesen(); dateilesen2(); random(); //dateierstellen(); generieren(); //for ( int x = 0; x < anzahl; x++) cout << " " << puffer.at(x); system("PAUSE"); return EXIT_SUCCESS; } /*for ( i = 0 ; i <= random; i++ ) { if (i < random) { code für durch die textdatei gehen zeile für zeile } else { zeile zwischenspeichern bzw. in neue datei schreiben} } */Explizit geht es um diese Code Stelle:
void generieren() { fstream d; d.open("generate.csv", ios::out); for ( int x = 0; x < anzahl; x++) d << puffer.at(randomzahlen.at(x)) + puffer2.at(randomzahlen2.at(x)) ; d.close(); }puffer 2 soll in der 2ten spalte der csv stehen wie kann man das machen ?
Danke schon mal im vorraus
Mfg
Barti20
-
Z.Bsp. so (mit Semikolon separiert)
void generieren() { ofstream d("generate.csv"); for ( int x = 0; x < anzahl; x++) d << puffer.at(randomzahlen.at(x)) << ";" << puffer2.at(randomzahlen2.at(x)) ; }PS.
voraus schreibt sich nur mit einem r.
-
nein geht leider nicht in der csv ist immer noch alles untereinandener
-
hmm hat den keiner ne idee woran es liegt habe nun mittlerweile glaube alles verscuht was ich gefunden habe.
-
Bei C++ alles versucht - der ist gut

for ( int x = 0; x < anzahl; x++) d << puffer.at(randomzahlen.at(x)) + puffer2.at(randomzahlen2.at(x)) << endl;Eine andere Möglichkeit ist "test2.txt" entsprechend schreiben.
MfG f.-th.
-
Bin mir jetzt nicht ganz sicher, ob ich das richtig verstanden hab - ist davon abhängig wie du deine "test" Dateien aufgebaut hast -> entweder so wie zuvor oder
endl
aus der Quelle entfernen.
MfG f.-th.
-
ha es funzt danke ich musst die zeilen umbrüche im txt entfernen dann gings.
Danke