2017-06-20 23 views
-3

Ich habe ähnliche Fragen für C++ - Programme untersucht, aber selbst wenn ich die Korrekturen anwende, wird mein Befehlsfenster geschlossen, nachdem ich meinen Wert eingegeben habe ("Geben Sie eine Note ein"). Mit Visual Studio 2017.C++ - Programmbefehlsfenster wird geschlossen, bevor das Programm beendet wird

#include <iostream> 

int main() 
{ 
    int grade =0; 
    std::cout << "Enter a grade (1-100): "; 
    std::cin >> grade; 

    if (grade >= 70) 
     std::cout << "\nPass\n"; 
    else 
     std::cout << "\nFail\n"; 
    std::cin.get(); 
    return 0; 
} 

Konnte dieser Fehler verursacht werden?

Loaded 'C: \ Programme \ Norton 360 \ NortonData \ 22.9.1.12 \ Definitionen \ BASHDefs \ 20170616,003 \ UMEngx86.dll'. Die PDB-Datei kann nicht gefunden oder geöffnet werden.

ich beschlossen alle meine anderen PDB-Fehler-Datei, aber nicht wissen, wie dieses einen loszuwerden und auch nicht wissen, ob es das, was das Problem verursacht ist ist. Ich denke, diese Fehler sind neu, seit ich Visual Studio 2015 installiert habe, um einen Debugging-Fehler loszuwerden. Ich habe dieses Programm vorher gut ausgeführt.

+1

*** Die PDB-Datei kann nicht gefunden oder geöffnet werden. *** Dies ist normal/nichts zu beachten. Die Nachricht teilt Ihnen mit, dass Sie keine Debugsymbole für Ihr Antivirenprogramm haben. Sie werden das nicht benötigen, es sei denn, Sie möchten Ihr AV debuggen. – drescherjm

Antwort

1

std::cin.get() >> grade; liest ein Zeichen aus cin und verschiebt es um den Wert grade, der 0 ist, dann wirft das Ergebnis weg. Ändere das zu std::cin >> grade; und es wird viel besser funktionieren.

+0

Ich weiß das zu schätzen. Ich werde die Änderung vornehmen. Leider hat sich das Problem mit dem Befehlsfenster nicht geändert. – britt

+0

Fügen Sie 'std :: cin.ignore();' hinzu, nachdem Sie die Note gelesen haben, um die neue Zeile im Puffer zu entfernen. –

0

Es gibt ein paar Optionen. Wenn Sie ein Konsolenprogramm haben, führen Sie es normalerweise von einer bereits laufenden Konsole aus, so dass Sie das Programm nicht pausieren müssen. Das Programm druckt nur seine Ausgabe und beendet sich, während die Konsole, die Sie bereits ausgeführt haben, unverändert bleibt.

Um Ihr Konsolenfenster hier offen zu halten, können Sie diese Funktion verwenden, um das Programm anzuhalten, bis der Benutzer die Eingabetaste drückt. Ich würde es jedoch nicht zu oft verwenden, es ist keine gute Programmiergewohnheit, Systemaufrufe großzügig so aufzurufen. Why "system" is evil

system("pause"); 

Eine andere Sache, die Sie tun können, ist eine Schleife schreiben, die den Benutzer auffordert, eine Option geben, um zu beenden, wie so.

Auf diese Weise ist die einzige Möglichkeit für das Beenden Ihres Programms die Eingabe des richtigen Eingangs.


Dieses Beispiel ist ziemlich simpel, aber es funktioniert. Wenn Sie Benutzereingaben validieren müssen, z. B. überprüfen, ob der Benutzer eine Ganzzahl usw. eingegeben hat, erzeuge ich einen Puffer, schreibe die Benutzereingabe in den Puffer, vergleiche die Eingabe mit dem Puffer, und wenn beide gleichwertig sind, akzeptiere die Eingabe. Wenn Sie dieses Beispiel ein wenig stärker machen möchten, können Sie den Benutzer eingegeben nur einen char-Wert wie so stellen Sie sicher:

do { 
    std::cout << "Enter 'q' to exit" << std::endl; 
    std::cin >> input; 

    if (std::cin.fail()) { 
     std::cin.clear(); // Clear the 'input fail' flag 
     std::cin.ignore(50, '\n'); 
    } 
} while (input != 'q'); 

Dies ist eine robustere Art und Weise die Fehlertoleranz in Ihrem Programm zu gewährleisten. Sie können diese Frage für weitere Details überprüfen. cin clear, ignore

Verwandte Themen