ERLEDIGT
NEIN
NEIN
ANTWORTEN
17
17
ZUGRIFFE
13647
13647
EMPFEHLEN
-
Ich bin gerade bei OOP und wollte folgendes Programm zum einstieg mal machen, aber irgendwie habe ich Probleme mit meiner getline Funktion.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
//----------------OOP - Konto-------------------- # include <iostream> # include <stdio.h> # include <stdlib.h> # include <time.h> # include <stdio.h> # include <string> # include <algorithm> using namespace std; //---------------Stephan Liebig 2005------------- # ifdef WIN32 # ifdef __BORLANDC__ # include <conio.h> # else void clrscr(void) { system ("cls"); } # endif # else /* WIN32 */ void clrscr(void) { } # endif class Konto { private: int Kontonummer; string KtoInhaber; float Stand; public: void setData(); void getData(); }; void Konto::setData() { cout << "Bitte geben Sie Ihre Kontonummer ein: "; cin >> Kontonummer; cout << endl << "Bitte geben Sie den Kontoinhaber ein: "; cin.getline >> KtoInhaber; cout << endl << "Bitte geben Sie den Kontostand ein: "; cin >> Stand; } void Konto::getData() { cout << endl << "Ihre Daten: " << endl; cout << "Ihre Kontonummer: " << Kontonummer << endl; cout << "Kontoinhaber: " << KtoInhaber << endl; cout << "Ihr Kontostand: " << Stand << endl; } void main(void) { Konto giro; giro.setData(); giro.getData(); getchar(); }
Kann mir jemand sagen wo der Fehler ist ?
-
02.12.05 13:50 #2
- Registriert seit
- Apr 2005
- Beiträge
- 191
Probiere bitte mal
Grüße OSCode :1
getline(cin, KtoInhaber);
-
Ja. Also:
Du benutzt
Das ist aber die Variante zum einlesen von c char Strings in der FomCode :1
cin.getline >>
Du liest einen c++ String ein, dass machst du mit:Code :1
cin.getline(char* string, int size)
Dann musst du noch Aufpassen, dass das vorher das letzte Return noch im Buffer ist, das wirst du ZB mitCode :1
getline(cin, buffer)
lost.Code :1
cin.get()
Ahja eine main sollte int zuruecjgeben!
-
Was die main(); betrifft ist es hier egal, da ich keinen Rückgabewert erhalte, müsste ich return 0; verwenden und das kann ich mir ja mit void main(void) sparen
-
03.12.05 14:50 #5
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Und trotzdem ist das ein schlechter Stil.Was die main(); betrifft ist es hier egal, da ich keinen Rückgabewert erhalte, müsste ich return 0; verwenden und das kann ich mir ja mit void main(void) sparen
mfg
umbrasaxum
-
Wie werde ich jetzt das überflüssige Return im Buffer mit cin.get() los? Das einzige was ich damit hinbekomme ist, daß das Programm auf ein Enter von mir wartet.
Zitat von canuzzi
-
28.01.06 19:35 #7
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Z.B. mit
Code :1
fflush(stdin);
mfg
umbrasaxum
-
Code :
1
cin.ignore(cin.rdbuf()->in_avail());
Auf Deutsch: Liebes Cin, schaue mal in deinen Lesepuffer und ignoriere soviele Zeichen wie gerade da sind.
Das mit dem fflush lässt du in C++ besser sein das muss nicht immer klappen. Ist afaik eh net defined was da bei raus kommt wenn man iostreams verwendet.
-
Dankeschön, aber das fflush funktioniert bei mir irgendwie nicht. Ich hab eine Datei offen und will die auslesen. Getline schnappt sich aber die Zeilenumbrüche in der Datei und die landen in meinem Array. Da kann ich die "\n" aber überhaupt nicht gebrauchen. Warum ist das so schwer diesen Buffer clean zu bekommen bevor Getline loslegt? Hab mir jetzt was mit substr(1, array[z].name.length()) gebastelt und schneid das hinterher raus.
-
Funktioniert das auch wenn ich getline(streamobjekt, array[z].name, ':'); auf meinen IO-Stream loslasse oder funktioniert das nur mit cin?
Zitat von FireFlow
-
Sollte mit jedem von istream klappen.
-
Hm. Ich hab das jetzt vor meine getline Anweisung eingefügt, aber es bewirkt nichts.
Zitat von FireFlow
-
29.01.06 13:52 #13
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Wenn du angibst, das ein Doppelpunkt dein Zeilenendezeichen ist, dann wird natürlich nicht mehr auf das '\n' geachtet und das ist ein ganz normales Zeichen und landet im String.
Zitat von Micha139
Eine Möglichkeit wäre erstmal komplett die Zeile in einen String einzulesen und dann die Zeile an den Doppelpunkten zu splitten.
Du kannst ja mal im Forum suchen da müßte irgendwo eine split Funktion für Strings definiert worden sein.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
So sieht auch meine Lösung mit substr() im Moment aus, nur daß ich den Zeilenumbruch rausschneide. Das einzige was funktioniert. Der Delimiter scheint das problem zu sein.
Zitat von deepthroat
.....
Ach ja nochmal zum Buffer leeren ein cin.ignore(INT_MAX, '\n'); tuts ünrigens auch, aber auch das funktioniert bei meinem Streamobjekt nicht, also weiter cutten...
Aber wißt ihr was da funktioniert... streamobjekt.ignore(INT_MAX, '\n'); oder streamobjekt.get(); Das mußte doch irgendwie gehen...
GrußGeändert von The_Rave (29.01.06 um 15:33 Uhr)
-
Wenn ich mit getline einen String einlesen will, sagt mir MS Visual C++ :
cpp(51) : error C3861: "getline": Bezeichner wurde nicht gefunden.
Mit dem Bezeichner ist der String gemeint nehme ich an. Was mache ich also falsch?
Code :1 2 3 4 5 6 7 8 9 10 11
string eingabe; size_t found; getline(cin,eingabe); found = eingabe.find("n"); if( found == string::npos ) { werte[j] = eingabe - 0; } else { readingValues = false; }
Ähnliche Themen
-
IE6 macht Probleme (Prototype)
Von multimolti im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 09.07.09, 16:19 -
getline macht eine Leerzeile zuviel
Von The_Rave im Forum C/C++Antworten: 1Letzter Beitrag: 29.01.06, 15:19 -
HL2 macht Probleme
Von Alexander12 im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 10.11.05, 15:09 -
Expand macht Probleme
Von ba-c im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 23.02.05, 18:06 -
hp psc 750 macht probleme!
Von psycho_matic im Forum HardwareAntworten: 2Letzter Beitrag: 25.07.04, 02:01





Zitieren
)
Login






