2017-08-09 55 views
-5

while循環「寫一個程序,它由一個while循環是(大約每次循環)在兩個整數讀取,然後打印它們 退出程序時終止。‘|’輸入「。如何停止在C++

我嘗試

#include <iostream> 
#include <cstdlib> 
using namespace std; 



int main(){ 

    int firstnumber; 
    int secondnumber; 
    int stopnumber; 


    while(stopnumber!='|'){ 

     cout <<"Please enter an integer, followed by another integer: \n"; 
     cin >> firstnumber >> secondnumber; 
     cout <<"\n" << firstnumber <<" "<< secondnumber<< " \n"; 

    } 

return 0; 
} 

程序需要2號,並將它們打印,但是當我輸入 '|'它進入無限循環。當我輸入'|'時如何停止程序

感謝

+1

你永遠不會改變'stopnumber'。你期望什麼? – Quentin

+1

有必要將'stopnumber'初始化爲'|''以外的內容,以防止在第一次循環迭代中出現未定義的行爲。然後在循環內指定'stopnumber ='|''將在執行到達}時停止循環。你的代碼沒有做。 – Peter

+0

我甚至需要stopnumber嗎?因爲別人建議我可以在while循環中使用firstnumber和secondnumber作爲我的條件 –

回答

0

你的循環測試stopnumber這是從來沒有設置。如果你將stopnumber設置爲firstnumbersecondnumber那麼也許你可以讓你的邏輯工作,但是現在缺少一個步驟。

0

這取決於你是否需要直接退出您收到後的「|」字符,或者是否你不介意先退出前通過的循環的其餘部分運行......

個人而言,我會想接收後直接退出「|」所以將遵循....

int a,b; 

while(){ 
    read your values a,b in 
    if (a='|' || b='|'){exit()}; 
    print your values 
} 
0

確定的基本思路,我想我已經找到了我的答案

我試圖把我的CIN while循環這樣

int firstnumber; 
int secondnumber; 

    while (cin >> firstnumber >> secondnumber) 

而且有效!謝謝大家對你的幫助

+0

任何非數字字符都會打破循環,不僅是''''。 – ZDF

+0

你說得對。回到繪圖板。 –

+0

您將首先決定如何處理無效輸入。您有兩種選擇:1.顯示錯誤消息並退出程序(更簡單)。 2.忽略無效輸入(更難)。 – ZDF

1

這是你的循環應該怎麼樣子:

  1. 讀取一個字符(std::cin::get)。
  2. 如果成功並且您的角色是停止符號,請打破循環。
  3. 如果你的性格是不是一個數字(::isdigit),繼續循環。
  4. 如果你的角色是一個數字,把它放回去(std::cin::putback)。
  5. 讀取兩個整數。
  6. 如果成功的話,顯示它們,如果沒有,清除流(std::cin::clear)。

你將不得不耐心地試圖瞭解getputback & isdigit在做什麼。

[編輯] Run it

#include <iostream> 
#include <cctype> 

int main() 
{ 
    char c; 
    while (std::cin.get(c) && c != '|') 
    { 
    if (!std::isdigit(c)) 
     continue; 

    std::cin.putback(c); 

    int i, j; 
    if (std::cin >> i >> j) 
     std::cout << i << ' ' << j << std::endl; 
    else 
     std::cin.clear(); 
    } 

    return 0; 
} 
+0

流支持'.peek()'成員,這可以幫助避免讀取/檢查/放回週期。 –

+0

@JerryCoffin角色必須從流中移除。 – ZDF

+0

最終,也許 - 但如果它是一個數字,那麼您不想立即刪除它。在這種情況下,顯而易見的意圖是,如果它是'|',程序將立即退出,在這種情況下,將它從流中刪除並不重要。 –

0

的std :: Stoi旅館(的std :: string) - 返回的std ::詮釋字符串

#include <iostream> 
#include <string> 

bool isNumber(std::string &str) { 
    for (auto i : str) { 
     if (i < '0' || i > '9') return false; 
    return true; 
} 

int main() { 
    int a, b; 
    std::string s; 

    while (true) { 
     std::cin >> s; 
     if (s == "|" || !isNumber(s)) break; 
     a = std::stoi(s); 

     std::cin >> s; 
     if (s == "|" || !isNumber(s)) break; 
     b = std::stoi(s); 

     std::cout << a << " " << b << std::endl; 
    } 

    return 0; 
} 
+0

如果你輸入'abc 123',該怎麼辦? – ZDF

+0

@ZDF你爲什麼想輸入abc 123? Ross_Barkley要求使應用程序讀取2個整數,或在'|'結束時結束寫入。 – bpieszko

+0

用戶鍵入他/她喜歡的任何內容。如果你輸入「||」會發生什麼? – ZDF