Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » getline Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.08.2007, 01:05 Uhr
~2chilled
Gast


Hi Leute,

wie im Betreff beschrieben geht es um den cin stream, bzw. um die getline Funktion.
getline sollte mir ja nur eine Zeile einlesen, bzw. bis zum delimiter \n
Das tut es aber in meinem Programmkontext überhaupt nicht, sondern es versucht bis ans Ende des string puffers zu lesen, ich versteh die Welt nicht mehr:


C++:
void PinCodeInput::readInput()
{
    std::string input;
    std::cout << "4 numbers: " << std::endl;
    
    getline(std::cin, input);
    
    int inputLength = input.length();
    
    if (inputLength != 4)
        readInput();
    for (int i = 0; i < inputLength; ++i)
    {
        if (!isdigit(input[i]))
        {
            readInput();
        }
        this->in[i] = (int)input[i];
    }
    
}



Ich seh an meinem Code nichts ungewöhnliches, aber getline hört nicht auf lesen zu wollen, selbst wenn ich auf der Konsole explizit ein \n eintippe.
In einem anderen Kontext funktioniert es wie gewohnt, deswegen poste ich den noch zusätzlich:


C++:
timeval time_a, time_b;
    PinCodeInput *pci;
    PinCode *pc;
    
    pci = new PinCodeInput;
    pci->readInput();
    pc = new PinCode(pci);
    gettimeofday(&time_a, 0);
    pc->crackCode();
    gettimeofday(&time_b, 0);
    
    std::cout << std::endl << "Dauer: " <<
        (double)(time_b.tv_usec - time_a.tv_usec)/1000000 << "s";
    
    delete pci;
    delete pc;



Das Problem ist für das eigentliche Programm eigtl total uninteressant, da das Programm sowieso nur Testzwecken dient und es noch zig Alternativen zum einlesen gibt...
Trotzdem will ich wissen wieso getline nicht so läuft wie es sollte, bin für jede Antwort dankbar!

chilled
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.08.2007, 01:34 Uhr
Hans
Library Walker
(Operator)


Hi,

wo bitte steckt denn getline in dem zweiten Codestück, das Du da geschickt hast?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.08.2007, 01:45 Uhr
~2chilled
Gast


Hi Hans,
im 2. Codestück wird die Funktion die im 1. Codestück definiert ist aufgerufen.
Ich meinte auch nicht dass das 2. Codestück funktioniert, sondern nur, dass das der Kontext zu dem "nicht funktionierenden" Programm ist. Sorry, hab ich bisschen undeutlich formuliert.
Wenn ich getline in einem Mini Programm benutze, funktioniert es astrein, deswegen geh ich mal davon aus, dass es mit dem Kontext zu tun hat, kann aber keinen Fehler finden...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.08.2007, 02:26 Uhr
Hans
Library Walker
(Operator)


Hi,

hast Du Dir das Verhalten von dem Programm schon mal mit 'nem Debugger angesehen?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.08.2007, 02:38 Uhr
~2chilled
Gast


ja hab ich, konnte nichts Aussergewöhnliches feststellen. Das hat natürlich auch damit zu tun, dass das Programm sowieso nur bis readInput() läuft und dann wie gesagt "hängen" bleibt. getline würde wahrscheinlich solange laufen bis der string puffer voll wäre. Ohne den Input von aussen läuft das Programm wie gewollt, es liegt wirklich nur an getline in Kombination mit std::cin. Hab auch schon probiert den 3. Parameter von getline() mit einzugeben, bringt aber logischerweise das gleiche Ergebnis. Apropos Logik, ich bezweifle langsam, dass es für das Problem überhaupt eine logische Erklärung gibt...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.08.2007, 12:45 Uhr
Kest
saint


Hi!

Vielleicht 'ne dumme Frage, aber:
Hast du nicht zufällig eine Funktion >getline< definiert?
Wenn nicht, warum dann >getline< ohne >std::<.

Oder es könnte an der Rekursion liegen:

C++:
//...
if (inputLength != 4)
        readInput();
//...
        if (!isdigit(input[i]))
        {
            readInput();
//...
    

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: