簡體   English   中英

cin.get()不起作用

[英]cin.get() not working

我今天寫了這個簡單的程序,但是我發現cin.get()除非有兩個,否則拒絕工作。 有任何想法嗎?

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

如果我將cin.get()移到嵌套循環之前,則循環將運行然后暫停。 如果我取出一個cin.get() ,該程序就結束了。 我正在使用最新版本的流血C ++開發人員

您沒有初始化'base'變量,但這雖然會導致錯誤,但它(與)您所看到的cin行為無關(直接),盡管有時(取決於編譯器)會導致您跳過循環。 您可能正在以零初始化之類的調試模式進行構建。

就是說,假設這是固定的:

當您鍵入一個值(例如5)並按Enter鍵時,流中的數據為5<newline> -運算符<<不會從流中提取換行符,而cin.get()會提取。 您的第一個cin.get()從流中提取該換行符,而第二個等待則等待輸入,因為該流現在為空。 如果只有一個cin.get()調用,它將立即提取換行符並繼續,並且由於在cin.get()調用之后沒有任何內容,因此程序將終止(應如此)。

從調試器運行時,似乎正在使用cin.get()來阻止程序關閉。 您通常可以通過IDE中的特定“無需調試即可啟動”命令來執行此操作; 那么您就不需要為此而濫用cin.get()了。

變量base尚未初始化。

您可以通過為base提供無效值來解決此問題:

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

要么

最好將do-while循環用作:

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

需要第二個cin.get()是,在使用cin讀取base值之后,緩沖區中留下了\\n 第一次調用cin.get()會消耗\\n ,第二個cin.get等待您的輸入。 為避免這種情況,您需要在cin之后通過調用cin.ignore從緩沖區中清除\\n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM