2017-08-09 11 views
-5

"(ループのたびに)2つのintを読み込み、それらを出力するwhileループからなるプログラムを作成してください 終了する '|'入力されます。C++でwhileループを停止する方法

プログラムが2数をとり、それらを印刷しますが、私が入力したときに

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

私の試み '|'それは無限ループに入ります。私が '|'を入力したときにプログラムを停止する方法

おかげ

+1

あなたは 'stopnumber'を変更することはありません。あなたは何を期待しましたか? – Quentin

+1

最初のループの反復で未定義の動作を防ぐには、 '' | ''以外に 'stopnumber'を初期化する必要があります。ループ内で 'stopnumber = '|''を指定すると、実行が '}'に達するとループが停止します。あなたのコードはどちらもしていません。 – Peter

+0

停止番号が必要な場合もありますか?誰か他の人が提案したように、私はwhileループの自分の条件としてfirstnumberとsecondnumberを使用することができます –

答えて

0

はあなたのループが設定されることはありませんstopnumberをテストしています。 stopnumberfirstnumberまたはsecondnumberに設定すると、ロジックが動作するようになる可能性がありますが、そのままステップがありません。

0

これは、「|」を受け取った後に直接終了する必要があるかどうかによって異なります。あなたが最初にループの残りの部分を実行して終了する前に.......

個人的に私は '|'そう

int a,b; 

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

[OK]を....の基本的な考え方に従うだろう、私は、このような

int firstnumber; 
int secondnumber; 

    while (cin >> firstnumber >> secondnumber) 

としてwhileループで私のCINを入れてみました、私は私の答え

を発見したと思います出来た!おかげで、誰もあなたの助けのための

+0

数字以外の文字は ''|''だけでなく、ループを壊します。 – ZDF

+0

あなたは正しいです。ふりだしに戻る。 –

+0

まず、無効な入力で何をするかを決める必要があります。 2つの選択肢があります。1.エラーメッセージを表示し、プログラムを終了します(より簡単です)。 2.無効な入力を無視します(より難しい)。 – ZDF

1

これはあなたのループはのようになります方法です。

  1. 文字(std::cin::get)を読みます。
  2. 成功し、キャラクタが停止シンボルである場合は、ループを解除します。
  3. 文字が数字(::isdigit)でない場合は、ルーピングを続けます。
  4. 文字が数字の場合は、それを元に戻してください(std::cin::putback)。
  5. 2つの整数を読み取ります。
  6. 成功した場合は表示し、そうでない場合はストリームを消去します(std::cin::clear)。

あなたは辛抱強くgetputback & isdigitが何をしているかを理解しようとする必要があります。

[EDIT] 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 ::文字列) - リターンがSTDからint型::文字列

#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

関連する問題