2017-09-24 106 views
-3
int main() 
{ 
    int in; 
    cout << "please enter a number between 1 and 70" << endl; 
    cin >> in; 
    string star = "*"; 
    const int lessthan = in < 1; 
    const int greaterthan = in > 70; 
    while (true) { 
     if (lessthan || greaterthan) { 
      cin.clear(); 
      cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
      cout << "please enter a number between 1 and 70" << endl; 
     } 
     else { 
      for (int looptimes = 0; looptimes <=in ; ++looptimes) { 
       cout.width(looptimes); 
       cout << star << endl; 
       break; 
      } 
     } 
    } 
} 

基本上我只想弄清楚如何從輸入正確時結束循環。此外,我希望能夠在輸入正確時停止詢問。在while循環中使用,然後執行for循環一次cin爲真

+0

哇,這是一些醜陋的縮進。 – melpomene

+0

出於好奇 - 爲什麼'star'是'string'而不是'char','lessthan'和'greaterthan'是'const int's而不是'const bool's? – Fureeish

+0

譚的風格代碼...我拒絕閱讀。 – iBug

回答

0

在進入邏輯之前,我們來談談變量的編碼風格和用法。你根本不需要大部分。

基本上我只是想弄清楚如何結束從當輸入正確

從你的代碼來看循環,我假設正確 intput由一個整數,它是在範圍1 >= x >= 70。這是一個堅實的陳述,可以用作while()循環條件。

int some_number = 0; 
do{ 
    std::cout << "Please enter a number between 1 and 70: "; 
    std::cin >> some_number; 
while(some_number < 1 && some_number > 70); 

在代碼中你可以看到,我們所要求的輸入,只要輸入的號碼是有效的整數這個(簡單得多)段是不在理想範圍內的。

如果您希望用戶輸入的內容不是整數(例如,用戶可能輸入some text而不是232),則可能需要使用其他解決方案。

std::string line; 
int some_number = 0; 
do{ 
    std::cout << "Please enter a number between 1 and 70: "; 
    std::getline(std::cin, line); 
    try{ 
     some_number = std::stoi(line); 
    } catch (...){ 
     some_number = 0; 
    } 
} while(some_number < 1 && some_number > 70); 

這將繼續要求在期望範圍內的一個整數,即使用戶輸入一些無效的(在這裏 - 多了一些別的東西)。我們簡單地掃描輸入並將其放入std::string。然後我們將該字符串解析爲int。如果我們成功,返回值將被分配給我們的變量。如果我們不這樣做,(在無效輸入的情況下)拋出並捕獲異常,它將some_number設置爲0,使我們的do-while循環再次執行。

+0

我並不是故意忽視這一點。但我已經嘗試過這一點,如果你在這個while循環中包含for循環,那麼while循環並沒有做它應該做的事情,所以我想我可以縮小到內部for循環是我的問題,因爲它看起來外部的while循環只會盡其所能。感謝您的幫助,我很欣賞我的代碼正在像您的反饋一樣被查看。 – rolaandoes

+0

@rolaandoes這個答案解釋瞭如何處理錯誤輸入的問題,只要前一個錯誤就要求輸入錯誤。如果您遇到其他困難,請註明。我假設你想在你收到正確的輸入後執行一些代碼。你的'for'循環應該如何處理正確的輸入?我猜你想打印某種模式,但是我在循環體的末尾發現了一個'break'聲明。嘗試刪除它,看看它是否工作 – Fureeish

+0

我希望它連續詢問何時輸入錯誤,所以我希望循環在詢問後等待輸入,並且一旦輸入正確後,使用該模式運行for循環,然後停止模式在第一次印刷之後。 – rolaandoes