2016-04-08 2 views
0

Ich habe eine Funktion, in der ich ganze Zahlen lesen möchte, bis ich eine nicht ganzzahl eingeben. Und ich möchte diese Funktion wiederholen, bis ich Enter drücke. Aber das Zeichen wird an das zweite Cin übergeben und es wird eine Endlosschleife.Endlosschleife mit zwei cin

void read() { 
    int x; 
    while (cin >> x); 
} 

int main() { 
    char a; 
    do { 
     read(); 
     cin.ignore (256, '\n') 
     cin >> a; 
    } while (a != '\n') 
} 
+0

Das Problem vorschlagen, zu verwenden ist, dass die cins irgendwie obwohl verbunden zu sein scheinen Die Variablen haben unterschiedliche Funktionen. –

+3

Dort ** ist ** eine einzige globale Variable ['cin'] (http://en.cppreference.com/w/cpp/io/cin). – axiac

+0

Ok, aber ich muss das '' n'' am Ende des ersten 'cin' loswerden, damit ich alles mit dem zweiten lesen kann. Und das 'cin.ignore()' macht nichts. –

Antwort

2

1) Sie haben vergessen, den Fail-Bit in std::cin zu entfernen; verwenden clear()

2) eine leere Eingabe zu erkennen, schlage ich vor, eine std::string und std::getline()

ich hier etwas wie

#include <iostream> 
#include <string> 

void read() { 
    int x; 
    while (std::cin >> x) ; 
    std::cin.clear(); 
    std::cin.ignore(std::numeric_limits<int>::max(), '\n'); 
} 

int main() { 
    std::string b; 

    do { 
     read(); 
     std::getline(std::cin, b); 
    } while (false == b.empty()); 

    return 0; 
}