2017-10-22 4 views
0
#include <iostream> 

int main() 
{ 
    float x, y; 
    while (true) 
    { 
    cin >> x; 
    if (x == y) 
     break; 
    y = x; 
    } 
    return 0; 
} 

これは入力された2つの連続する数字が同じである場合に破損するはずのループです。私はいくつかの助けを感謝したい2つの質問があります。2つの連続した出力が同じ場合にループが壊れます

まず、これはタスクを解決する最も効率的な方法のようですか?

第2に、xとyに宣言された値が割り当てられていないのですか(float x=?, y=?)?具体的には、最初にループを入力したときに、xx == y)と比較するために、yに何らかの値を設定しないでください。

+2

最初のタイムアウトを編集されています初期化されていません。初期化されていないものとの比較を避けるために、最初にフラグを設定する必要があります。 –

+0

@ Jean-FrançoisFabre詳細を教えてください。私は本当にプログラミングの初心者だから、フラグについて聞いたことはないと思う。 – Theta

+0

「first_input = True;」というブール値を意味します。 –

答えて

1
  1. 「効率的」とは何ですか? 「実行時にできるだけ少ないCPUを使用する」という意味では最も効率的ではありませんが、プログラムがユーザーの入力を待っている時間の99.999%を費やしていれば、それは問題になりません。

  2. いいえ、そうです。 yが初期化されていないという問題があります(一般に、初期化されていない変数はコードのエラーです)。それを考慮に入れてロジックを再構成する必要があります。

あなたは自分のコードが短い、または単純になりたい場合は、あなたのような何かを行うことができます:何をやって

#include <iostream> 

int main() 
{ 
    float x, y; 
    std::cin >> y; 
    while (std::cin >> x && x != y) { 
     y = x; 
    } 
} 
+0

私は、プログラムがよりシンプルであることを意味しますか?私は早い段階でも、さまざまな可能なアプローチがプログラミングを本当に興味深いものにしていることを知っているので、どんな提案も感謝しています。 – Theta

+0

もう1つ質問がありますが、cinがwhileの状態にあるときはどうしますか?ブール値が割り当てられていますか? – Theta

+0

@Theta 'cin >> x'のブール値は、数字が' x'に読み込まれたかどうかです。 – melpomene

1

を(初期値の欠如を除く)正常に見えます。同じ結果を達成する方法はたくさんありますが、スタックオーバーフローはディスカッションサイトではありません。初期値については、そうです、いくつかあるべきです。あなたのコードの簡単な書き換え:

int main() 
{ 
    float x=1; 
    float y=2; 
    bool firstLoop=true; // it is possible that the user first inputs the number 2. To avoid the loop ending before the user inputs the first 2 numbers we use this flag 
    while (true) 
    { 
      cin >> x; 

      if (x == y && !firstLoop) 
       break; 
      y = x; 
      firstLoop=false; 
    } 
    return 0; 
}  
+0

ありがとうございます。しかし、ブーリアンを使わないで簡単なアプローチを考えれば、私はまだ興味がありますか? – Theta

+0

私は他の答えを追加しました – user2887596

1

他の方法は次のようになります。

int main() 
{ 
    float x=0; 
    cin >> x; 
    cin >> y; 
    while(x!=y){ 
     x=y; //x will always be the previously entered number 
     cin >> y; //y will always be the newly entered number 


    } 
    return 0; 
} 

EDIT:答えで小さなミスがあった、それはY、

+0

ループの外側にCINを入れたくない場合は、私があなたの修正を含めて提案した方法が最高になると思うかどうか教えてください。 – Theta

関連する問題