2015-10-19 57 views
0

所以我正在閱讀Bjarne Stroustrup的「編程:使用C++的原則和實踐」,並且我有一個演練,它告訴我編寫一個包含while循環的程序(每次在循環中)讀入兩個整數,然後打印出來,當輸入「|」時它應該退出。我寫了這個程序(我確信有一個更簡單的方法來寫它,已經得到了過於複雜的事情的「禮物」),但我無法找到退出循環的方式下面的代碼:使用C++ while循環演練的編程原則和練習。無法找到退出循環的方法

#include <iostream> 
#include <vector> 

int main() 
{ 

    std::vector<int> answers; 
    int answer; 
    int intCounter=0; 

    while(answers.size()<=2 ) 
    { 

     if(answer=='|') 
     { 
      return 0; 
     } 
     std::cin>>answer; 
     answers.push_back(answer); 
     ++intCounter; 

     if(intCounter==2) 
     { 
      for(int x : answers) 
      { 
       std::cout<<x<<'\n'; 
      } 
      answers.clear(); 
      intCounter=0; 
     } 

    } 

    return 0; 
} 

基本上,如果我寫一個if語句來檢查,如果答案是等於' |',編譯器認爲我的意思是它的整數值(124或類似的東西),並終止循環,當我寫124,這顯然不是我想要的噸。我試圖通過互聯網尋找一種將int轉換爲char的方式,但是我從此沒有理解任何東西。請記住,我是初學者,最簡單的解決方案將是最好的。提前致謝。

+1

您可以在輸入作爲'的std :: string',然後轉換爲int如果不是'|' – NathanOliver

+4

你有*不確定的行爲*中的代碼,當您使用在它被初始化之前的'答案'。未初始化的局部變量具有*不確定*值,除初始化外,使用它們會導致未定義的行爲。 –

+1

哦,我的天啊,請正確格式化您的代碼! :P –

回答

0

cin >> answer將在下一個要讀取的非空白字符不是數字時失敗。您可以使用該行爲來結束循環。

// Break inside the loop. 
while(true ) 
{ 
    std::cin>>answer; 

    // If there was an error in reading, break out of the loop. 
    if (!std::cin) 
     break; 

    answers.push_back(answer); 

    ++intCounter; 

    if(intCounter==2) 
    { 
     for(int x : answers) 
     { 
      std::cout<<x<<'\n'; 
     } 
     answers.clear(); 
     intCounter=0; 
    } 
} 
0

兩個變化:

  1. 如果你的任務是隻打印號碼,你可以只使用字符串。

  2. 在輸入前您正在檢查對|的回答的值。 所以

    #include<iostream> 
    #include <vector> 
    #include<string> 
    using namespace std; 
    int main(){ 
    
    std::vector<string> answers; 
    string answer; 
    int intCounter=0; 
    
    while(answers.size()<=2 ){ 
    
    std::cin>>answer; 
    //after input 
    if(answer=="|"){ 
    return 0; 
    } 
    answers.push_back(answer); 
    ++intCounter; 
    
    if(intCounter==2){ 
    for(int x=0;x< answers.size();x++){ 
    std::cout<<answers[x]<<'\n'; 
    } 
    answers.clear(); 
    intCounter=0; 
    } 
    } 
    
    return 0; 
    }