Frage

Ich schrieb dieses einfache Programm heute, aber ich fand, dass cin.get() an die Arbeit verweigert, es sei denn es 2 von ihnen sind. Irgendwelche Ideen?

#include <iostream>
using namespace std;

int main(){
    int base;
    while ((base < 2) || (base > 36)){
          cout << "Base (2-36):" << endl; 
          cin >> base;
          }
    string base_str = "0123456789abcdefghijklmnopqrstuvwxyz";
    for (int i = 0; i < base; i++){
        for (int j = 0; j < base; j++){
            for (int k = 0; k < base; k++){    
                cout << base_str[i] << base_str[j] << base_str[k] << endl;
            }
        }
    }
    cin.get();
    cin.get();
}

wenn ich eine cin.get() bis vor den verschachtelten Schleifen bewegen, laufen die Schleifen dann Pause. wenn ich eine cin.get() nehmen, das Programm einfach beendet. im die neueste Version des Blutvergießens C ++ dev

War es hilfreich?

Lösung

Sie initialisieren nicht das ‚Basis‘ Variable, aber während die Fehler verursachen wird es nicht (direkt) auf das Verhalten im Zusammenhang mit Sie cin sind zu sehen, auch wenn es manchmal, abhängig von den Compiler, führt, dass Sie auszulassen Schleifen. Du bist wahrscheinlich im Debug-Modus bauen, dass die Null-initialisiert oder so etwas.

Das heißt, dass unter der Annahme festgelegt wurde:

Wenn Sie einen Wert eingeben (zum Beispiel 5) und drücken Sie die Eingabetaste, die Daten in den Stream 5<newline> ist - Operator << nicht die Newline aus dem Stream nicht extrahieren, aber cin.get () der Fall ist. Ihre erste cin.get () extrahiert, dass Newline aus dem Strom, und die zweite Warte wartet auf die Eingabe, da der Strom ist nun leer. Wenn Sie nur den eine cin.get () -Aufruf haben, würde es die Newline extrahiert sofort und weiter, und da gibt es nichts, nach dem cin.get () Aufruf, das Programm beendet wird (wie es sein soll).

Es scheint, dass Sie verwenden cin.get () Ihr Programm zu stoppen zu schließen, wenn der Debugger ausführen; Sie können dies in der Regel tun, über eine spezielle „Starten ohne Debuggen“ von Ihrem IDE-Befehl; dann werden Sie nicht brauchen cin.get () für diesen Zweck zu missbrauchen.

Andere Tipps

Variable base nicht initialisiert wurde.

Sie können das Problem beheben, indem einen ungültigen Wert zu base als geben:

int base = 1; // 1 is not in the valid range.
while ((base < 2) || (base > 36)){

oder

besser nutzt ein do-while-Schleife wie:

int base;
do{
     cout << "Base (2-36):" << endl;
     cin >> base;
} while ((base < 2) || (base > 36));

Der Grund, warum Sie die 2. cin.get() brauchen, ist, dass, nachdem Sie den base Wert mit cin lesen, ein \n im Puffer belassen. Der erste Aufruf von cin.get() verbraucht, dass \n und die zweiten cin.get wartet auf Ihre Eingabe. Um dies zu vermeiden müssen Sie die \n aus dem Puffer nach cin durch den Aufruf cin.ignore

spülen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top