2017-12-28 15 views
1

私はC++を学び、C++のプライマープラスを読んでいますが、なぜこのコードに2つの "cin >> ch"が必要か理解できません。私は最初のcinはユーザー入力された文字を読み込むことを知っています。しかし、最初に "cin >> ch"を削除してコードを実行すると、プログラムにエラーはありません。なぜ2番目のcinはユーザーが入力する必要はありませんか?whileループでは、ユーザーがC++で入力する必要はありません

#include <iostream> 
int main() 
{ 
    using namespace std; 
    char ch; 
    int count = 0; 
    cout << "Enter characters; enter # to quit:\n"; 
    cin >> ch; //get a character 
    while (ch != '#') 
    { 
     cout << ch; 
     ++count; 
     cin >> ch; // get the next character 
    } 
    cout << endl << count << " characters read\n"; 
    return 0; 
} 
+1

'ch!=# 'は、最初の' cin'が存在しない場合を意味します。また、そのコードを実行すると、 'cout << ch;'の結果はどうなりますか? – kabanus

+2

最初の 'cin'がなければ、最初にループに入るとき' ch'の値は何でしょうか? –

答えて

1

whileループの入力条件を評価することができます。 while条件を入力した場合、あなたが最初に何かを入力するための

#include <iostream> 

int main() 
{ 
    char ch; 
    int count = 0; 
    std::cout << "Enter characters; enter # to quit:\n"; 

    while (std::cin >> ch && ch != '#') 
    { 
     std::cout << "entered: " << ch << std::endl; 
     ++count; 
    } 

    std::cout << std::endl << count << " characters read" << std::endl; 

    return 0; 
} 

それが待機します。入力が受信されると、入力が#でないかどうかがチェックされます。入力がループに入っていなければ、入力がプリントアウトされ、カウンタが増加し、別の入力を待つまで戻ります。 #を入力すると、条件はfalseになり、ループは中止されます。

0

最初のcinを削除すると、カウントは増分されません。ユーザーはループに入る前に#文字を入力することができ、したがってプログラムはそれを入力することはできません。

+1

それはそれよりずっと悪いです。彼らが最初の 'cin'を削除した場合、' ch'は未定義の値を持ち、プログラムには未定義の振る舞いがあります。 –

-1

最初のcin >> chは明らかにユーザーからの入力を受け取りますが、 は同じ変数名 "ch"を使用してwhileループで再度データを受け入れます。 プログラムを実行すると、 whileループではないwhileループの前に受け入れる最初の値のみを受け入れます。 whileループでは、変数 "ch"に新しい値を代入できますが、新しい値を再び受け入れることはできません。

関連する問題