2017-06-20 158 views
-3

我已經查看了C++程序的類似問題,但即使在應用修復程序時,在輸入我的值(「輸入等級」)後我的命令窗口也會關閉。使用Visual Studio 2017.C++程序命令窗口在程序完成前關閉

#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; 
} 

此錯誤是否會導致它?

加載 'C:\ Program Files文件\諾頓360 \ NortonData \ 22.9.1.12 \定義\ BASHDefs \ 20170616.003 \ UMEngx86.dll'。 找不到或打開PDB文件。

我解決我的所有其他PDB文件錯誤,但不知道如何擺脫這一個,也不會知道它是什麼導致了問題。我認爲這些錯誤是新的,因爲我安裝了Visual Studio 2015以擺脫調試錯誤;我以前運行這個程序就好了。

+1

***無法找到或打開PDB文件***這是正常的/沒有什麼值得關注的。該消息告訴您,您的防病毒程序沒有調試符號。除非你想調試你的AV,否則你不會需要它。 – drescherjm

回答

1

std::cin.get() >> grade;cin中讀取一個字符,並將其右移grade中存儲的值,即0,然後丟棄結果。將其更改爲std::cin >> grade;,它會更好。

+0

我明白這一點。我會做出改變。不幸的是,它沒有改變命令窗口的問題。 – britt

+0

在讀入等級以刪除緩衝區中的換行符後,添加'std :: cin.ignore();'。 –

0

有幾個選項。通常當你有一個控制檯程序時,你可以從一個已經運行的控制檯運行它,所以你不需要暫停程序。該程序只是打印輸出並退出,而您已經運行的控制檯仍然保留。

要讓您的控制檯窗口在此處打開,您可以使用此功能暫停程序,直到用戶按下Enter鍵。雖然我不會太頻繁地使用它,但像這樣大量地調用系統調用並不是一個好的編程習慣。 Why "system" is evil

system("pause"); 

你可以做的另一件事是編寫一個循環,提示用戶輸入一個選項退出,就像這樣。

char input; 

do { 
    std::cout << "Enter 'q' to exit" << std::endl; 
    std::cin >> input; 
} while (input != 'q'); 

這樣,您的程序退出的唯一方法就是輸入正確的輸入。


這個例子很簡單,但它的工作原理。當你需要驗證用戶輸入時,例如驗證用戶輸入的整數等,我創建一個緩衝區,將用戶輸入寫入緩衝區,將輸入與緩衝區進行比較,如果兩者相同,則接受輸入。如果你想使這個例子強一點,你可以確保用戶只輸入一個字符值,像這樣:

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'); 

這是確保在你的程序的容錯能力更強大的方式。你可以查看這個問題的更多細節。 cin clear, ignore