__int64 an Operator schicken??????????
-
Nimm dafür lieber einen String, da eine Telefonnr. kein "Wert" ist. Sie ist einfach nur eine ananderreihung von Ziffern, hätten genauso gut Buchstaben sein können. int u.a. würde ich nur für "Werte" nehmen, mit denen man rechnen kann oder will. Außerdem hast du bei Zahlentypen das Problem, das du z.B. eine Telefonnr. nicht separieren kannst: +49-1234-567890 geht unmöglich!
-
Ok ich muss gestehen da hast du rech , dumm von mir das ich da nicht drauf gekommen bin. Doch jetzt binn ich auf ein weiteres Problem in meinem Programm gestoßen. Das Programm - was mal eine Addressen Datenbank werden soll - ist noch im "Anfangsstadium" ,und ich weis das macht inhaltlich noch nicht fiel Sinn.Beim einlesen der Handynummer wartet das Programm nicht auf die eingabe sondern geht gleich aus.Ich kapier aber nich warum.
#include <string> #include <iostream> #include <fstream> #include <windows.h> using namespace std; class eintrag { public: string name; string nachna; char alter; string telefon; public: int neu() { ofstream dat_aus; string dateiname; cout <<"Geben sie den Dateinamen und Pfad ein:"; cin >> dateiname; cout << endl; dat_aus.open(dateiname.c_str(), ios_base::out); cout << "Eintrag hinzufügen" << endl; cout <<"Name:"; cin >> name; cout <<"Nachname:"; cin >> nachna; cout <<"Alter:"; cin >> alter; cout <<"Telefon: "; cin >> telefon; dat_aus << name <<" " << nachna <<" " << alter <<" " << telefon << endl; dat_aus.close(); return 0; } int lesen() { ifstream dat_ein; string dateiname; cout <<"Geben sie den Dateinamen und Pfad ein:"; cin >> dateiname; cout << endl; dat_ein.open(dateiname.c_str(), ios_base::in); char eing; while (!dat_ein.eof()) { dat_ein.get(eing); cout << eing ; } dat_ein.close(); Sleep (10000); return 0; } }; int main() { string sw , hallo ; eintrag ein1; while (sw != "/exit") { cout <<"Main Menue"<<endl ; cout <<"\"\\n\" = Neuer Eintrag ,\"\\l\" = Lesen , \"\\exit\" = Beenden) " << endl; cin >> sw; if (sw == "\\n") { ein1.neu(); } else if (sw == "\\l") {ein1.lesen(); } else {cout << "Programm wird beendet!" << endl; Sleep (1000); } } return 0; }
-
User--- schrieb:
Gibt ne tolle Regel: Nummern mit denen du nicht rechnest (Telefon, PLZ,...) immer als string speichern.
hab sogar mal den Grund gewusst, muss aber zu meiner Schande gestehen, dass ich es vergessen hab

führende nullen ?

-

-

-
Hightaker schrieb:
Ok ich muss gestehen da hast du rech , dumm von mir das ich da nicht drauf gekommen bin. Doch jetzt binn ich auf ein weiteres Problem in meinem Programm gestoßen. Das Programm - was mal eine Addressen Datenbank werden soll - ist noch im "Anfangsstadium" ,und ich weis das macht inhaltlich noch nicht fiel Sinn.Beim einlesen der Handynummer wartet das Programm nicht auf die eingabe sondern geht gleich aus.Ich kapier aber nich warum.
cin.ignore() wäre eine gute Idee - nach dem Einlesen des Alters (da ist übrigens int oder short günstiger als char) stehen noch Zeichen im Eingabepuffer, die bei der nächsten Eingabe weitergegeben werden.
-
Danke für den Tip
Mir ist auch schon aufgefallen das wen ich z.B. als Namen "Steffan" ,Nachnamen "Rettberg" und als Alter "15" eingegeben hab stand in der TXT-Datei nachher :Steffan Rettber 1 5also ein Lehrzeichen zwischen der 1 und der 5 aber woran ligt das genau?
Das passiert doch schließlich auch nicht wen ich die Daten stat in einer Datei in Variablen speicher.
-
du hast 'Alter' als char definiert - da passt nur ein einzelnes Zeichen rein. D.h. beim Einlesen wurde die '1' in Alter und die '5' im nächsten Schritt als Telefonnummer gespeichert.
(Tipp von mir: verwende kein char für Zahlen-Eingaben, nimm dafür lieber einen "richtigen" Integer-Typ (z.B. short) - die Eingaberoutinen für char arbeiten anders als ihre short/int Entsprechung)
-
Vergiss short, das braucht man nie!

-
Ok danke kapiert

Noch eine Frage:
Wen ich mehrere Einträge in einer TXT-Datei speichern will brauche ich ja eine suchfunktion um die Infos für eine Person zu finden , wie setz ich das um?
-
Zeilenweise einlesen und aufteilen in dein struct, dann alles in einen vector<eintrag> packen und std::find (oder std::find_if) drüberjagen.
Kenner der C++ Szene schrieb:
Vergiss short, das braucht man nie!

Na wenn du das sagst

-
Kanst du mir bitte mal ein Beispiel schreiben? Ich bin noch Anfänger.

-
vector<eintrag> Werte; //einlesen: ifstream fin("Daten.txt") while(fin) { eintrag wert; fin>>wert.name>>wert.nachna>>wert.alter>>wert.telefon; if(fin) Werte.push_back(wert); } //suchen: class finde_name : public unary_function<bool,eintrag> { public: finde_name(const string& vn):m_vn(vn){} bool operator()(const eintrag& e) {return e.name==m_vn;} private: string m_vn; }; vector<eintrag>::iterator pos=find_if(Werte.begin(),Werte.end(),finde_name("Hightaker")); if(pos!=Werte.end()) cout<<"gefunden:"<<pos->name<<" "<<pos->nachna<<endl; else cout<<"nicht gefunden."<<endl;
-
Wie und Wo muss ich das einfügen? ich kriegs nicht hin ,bin wohl zu dumm.
-
Die Vergleichsklasse (finde_name) wird global deklariert, so daß deine Funktionen sie wiederfinden. Die übrigen Schnipselchen kommen entweder in die main() oder (besser) in eine eigene Funktion, die deine Daten durchsuchen soll (nach dem Einlesen stehen alle Datensätze aus deiner Datei in dem Vektor 'Werte' - find_if arbeitet diesen Vektor durch und liefert den ersten Datensatz, für den finde_name::operator() true zurückliefert (oder Werte.end(), wenn es keinen gibt)).
PS: Wenn du nach anderen Kriterien suchen willst, benötigst du dafür eigene Vergleichsklassen wie finde_nachname oder finde_alter, die analog zu finde_name aufgebaut werden sollten.
-

Ich hab meinen Quelltext noch ein bischen verändert und alles so gemacht wie du gesagt hast aber es geht trotzdem nich !!!#include <string> #include <iostream> #include <fstream> #include <windows.h> using namespace std; string dateiname = "MDB.TXT"; class eintrag { public: string name; string nachna; short alter; string tele; int neu() { ofstream dat_aus; dat_aus.open(dateiname.c_str(), ios_base::out | ios_base::app); cout << "Eintrag hinzufuegen" << endl; cout <<"Name:"; cin >> name; cout <<"Nachname:"; cin >> nachna; cout <<"Alter:"; cin >> alter; cout <<"Telefon:"; cin >> tele; dat_aus << name <<" " << nachna <<" " << alter <<" " << tele << endl; dat_aus.close(); cout << "\nEintrag gespeichert!\n\n\n" <<endl; return 0; } int lesen() { ifstream dat_ein; eintrag eintrag2 ; dat_ein.open(dateiname.c_str(), ios_base::in); dat_ein >> eintrag2.name >> eintrag2.nachna >> eintrag2.alter >> eintrag2.tele; cout <<"Name:"<< eintrag2.name <<endl; cout <<"Nachname:"<< eintrag2.nachna <<endl; cout <<"Alter:"<< eintrag2.alter << endl; cout <<"Telefonnummer:"<< eintrag2.tele << endl; dat_ein.close(); fflush(stdin); getchar(); return 0; } }; class finde_name : public unary_function <bool,eintrag> { public: finde_name(const string& vn):m_vn(vn){} bool operator()(const eintrag& e) {return e.name==m_vn;} private: string m_vn; }; int main() { string sw , hallo ; eintrag ein1; while (sw != "/exit") { cout <<"Main Menue"<<endl ; cout <<"Verwendete Datenbankdatei:"<< dateiname << endl; cout <<"\"\\n\" = Neuer Eintrag ,\"\\l\" = Lesen , \"\\exit\" = Beenden) " << endl; cin >> sw; if (sw == "\\n") { ein1.neu(); } else if (sw == "\\l") {void finde_name(); vector<eintrag>::iterator pos=find_if(Werte.begin(),Werte.end(),finde_name("Hightaker")); if(pos!=Werte.end()) cout<<"gefunden:"<<pos->name<<" "<<pos->nachna<<endl; else cout<<"nicht gefunden."<<endl; while(fin) { eintrag wert; fin>>wert.name>>wert.nachna>>wert.alter>>wert.telefon; if(fin) Werte.push_back(wert); } //ein1.lesen(); } else {cout << "Programm wird beendet!" << endl; Sleep (1000); } } return 0; }
-
Hightaker schrieb:

Ich hab meinen Quelltext noch ein bischen verändert und alles so gemacht wie du gesagt hast aber es geht trotzdem nich !!!Was funktioniert nicht?
Compilier Error?
Wo stürzt es ab?wir brauchen ein paar infos. Wenn ich den code compiliere krieg ich die fehlermeldung:
98 C:\Dev-Cpp\main9.cpp `vector' undeclared (first use this function)für vectoren kenn ich mich nicht aus, muss man wahrscheinlich noch was includieren.
Das hab ich mir dann gedacht und einfach mal #include<vector> geschrieben. Herrauskam folgendes:99 C:\Dev-Cpp\main9.cpp `Werte' undeclared (first use this function)Und das ist kein Wunder, denn du hast etwas vergessen zu kopieren.
Korrigiere den Code und melde dich dann nochmal.
mfg.