tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
13647
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    phpMars phpMars ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Ort
    Airlenbach
    Beiträge
    136
    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 ?
     

  2. #2
    Onkel Schuppig Onkel Schuppig ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    191
    Probiere bitte mal
    Code :
    1
    
    getline(cin, KtoInhaber);
    Grüße OS
     

  3. #3
    Avatar von canuzzi
    canuzzi canuzzi ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Wien
    Beiträge
    164
    Ja. Also:
    Du benutzt
    Code :
    1
    
    cin.getline >>
    Das ist aber die Variante zum einlesen von c char Strings in der Fom
    Code :
    1
    
    cin.getline(char* string, int size)
    Du liest einen c++ String ein, dass machst du mit:
    Code :
    1
    
    getline(cin, buffer)
    Dann musst du noch Aufpassen, dass das vorher das letzte Return noch im Buffer ist, das wirst du ZB mit
    Code :
    1
    
    cin.get()
    lost.
    Ahja eine main sollte int zuruecjgeben!
     

  4. #4
    phpMars phpMars ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Ort
    Airlenbach
    Beiträge
    136
    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
     

  5. #5
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    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
    Und trotzdem ist das ein schlechter Stil.


    mfg
    umbrasaxum
     

  6. #6
    The_Rave The_Rave ist offline Mitglied Silber
    Registriert seit
    Aug 2005
    Beiträge
    69
    Zitat Zitat von canuzzi
    Dann musst du noch Aufpassen, dass das vorher das letzte Return noch im Buffer ist, das wirst du ZB mit
    Code :
    1
    
    cin.get()
    lost.
    Ahja eine main sollte int zuruecjgeben!
    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.
     

  7. #7
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    Z.B. mit
    Code :
    1
    
    fflush(stdin);


    mfg
    umbrasaxum
     

  8. #8
    FireFlow FireFlow ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    213
    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.
     
    --//--//--// My StillLife! //--//--//--
    Obere URL dient nur als Google-Push )

  9. #9
    The_Rave The_Rave ist offline Mitglied Silber
    Registriert seit
    Aug 2005
    Beiträge
    69
    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.
     

  10. #10
    The_Rave The_Rave ist offline Mitglied Silber
    Registriert seit
    Aug 2005
    Beiträge
    69
    Zitat Zitat von FireFlow
    Code :
    1
    
    cin.ignore(cin.rdbuf()->in_avail());
    Funktioniert das auch wenn ich getline(streamobjekt, array[z].name, ':'); auf meinen IO-Stream loslasse oder funktioniert das nur mit cin?
     

  11. #11
    FireFlow FireFlow ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    213
    Sollte mit jedem von istream klappen.
     
    --//--//--// My StillLife! //--//--//--
    Obere URL dient nur als Google-Push )

  12. #12
    The_Rave The_Rave ist offline Mitglied Silber
    Registriert seit
    Aug 2005
    Beiträge
    69
    Zitat Zitat von FireFlow
    Sollte mit jedem von istream klappen.
    Hm. Ich hab das jetzt vor meine getline Anweisung eingefügt, aber es bewirkt nichts.
     

  13. #13
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Micha139
    Funktioniert das auch wenn ich getline(streamobjekt, array[z].name, ':'); auf meinen IO-Stream loslasse oder funktioniert das nur mit cin?
    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.

    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.

  14. #14
    The_Rave The_Rave ist offline Mitglied Silber
    Registriert seit
    Aug 2005
    Beiträge
    69
    Zitat Zitat von deepthroat
    Hi.
    Du kannst ja mal im Forum suchen da müßte irgendwo eine split Funktion für Strings definiert worden sein.
    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.

    .....

    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)
     

  15. #15
    MEETyA MEETyA ist offline Mitglied Bronze
    Registriert seit
    Sep 2007
    Beiträge
    25
    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

  1. IE6 macht Probleme (Prototype)
    Von multimolti im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 09.07.09, 16:19
  2. getline macht eine Leerzeile zuviel
    Von The_Rave im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 29.01.06, 15:19
  3. HL2 macht Probleme
    Von Alexander12 im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 10.11.05, 15:09
  4. Expand macht Probleme
    Von ba-c im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 23.02.05, 18:06
  5. hp psc 750 macht probleme!
    Von psycho_matic im Forum Hardware
    Antworten: 2
    Letzter Beitrag: 25.07.04, 02:01