2016-04-02 19 views
1

私の質問には事前にお詫び申し上げます。私の初めてのプログラミング経験は、私の現在のコースでした。質問には、なぜ私のコードはこのループをスキップしますか?

なぜ私のコードは2番目のwhileループをスキップしていますか?入力にpまたはPを選択すると、最初のwhileループに関する入力を求められますが、2番目の入力は必要ありません。例:分/分の代わりに分。 @Vaughnカトーとして

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

    int main() 
    { 
     char service; 
     int number; 
     int minutes; 
     int dayMinutes; 
     int nightMinutes; 
     double bill; 
     double const REG_FEE = 10.00; 
     double const PREM_FEE = 25.00; 
     double const REG_MIN = 0.20; 
     double const PREM_DAY = 0.10; 
     double const PREM_NIGHT = 0.05; 

     cout << "Please enter your account number: "; 
     cin >> number; 
     cout << "Please enter your service type (regular or premium): "; 
     cin >> service; 

     while (service == 'r' || 'R') 
    { 
      cout << "How many minutes have been used for this service?: "; 
      cin >> minutes; 

      if (minutes < 50) 
      { 
       bill = REG_FEE; 
       cout << fixed << showpoint << setprecision(2); 
       cout << "The account number entered was: " << number << "." << endl; 
       cout << "The service type entered was: " << service << "." << endl; 
       cout << "You used: " << minutes << " minutes." << endl; 
       cout << "Your bill is $" << bill << "." << endl; 
      } 
      else 
      { 
       bill = ((minutes - 50) * REG_MIN) + REG_FEE; 
       cout << fixed << showpoint << setprecision(2); 
       cout << "The account number entered was: " << number << "." << endl; 
       cout << "The service type entered was: " << service << "." << endl; 
       cout << "You used: " << minutes << " minutes." << endl; 
       cout << "Your bill is $" << bill << "." << endl; 
      } 
     return 0; 
    } 
     while (service == 'p' || 'P') 
    { 
      cout << "How many minutes were used during the day?: "; 
      cin >> dayMinutes; 
      cout << "How many minutes were used during the night?: "; 
      cin >> nightMinutes; 

      if (dayMinutes > 75) 
      { 
       bill = ((dayMinutes - 75) * PREM_DAY) + PREM_FEE; 
      } 
      if (nightMinutes > 100) 
      { 
       bill = ((nightMinutes - 100) * PREM_NIGHT) + PREM_FEE; 
       bill = bill + PREM_FEE; 
       cout << fixed << showpoint << setprecision(2); 
       cout << "The account number entered was: " << number << "." << endl; 
       cout << "The service type entered was: " << service << "." << endl; 
       cout << "You used: " << dayMinutes + nightMinutes << " minutes." << endl; 
       cout << "Your bill is $" << bill << "." << endl; 
      } 

      else 
      { 
       cout << "You have entered an invalid service code."; 
      } 
     return 0; 
    } 

     return 0; 
    } 
+1

ループに 'return'があり、終了します。 –

+0

whileループの目的は何ですか?ループの使用が冗長であるため、各ループを一度だけ実行するように見えます。 –

+0

whileループが壊れています。それは((service == 'r')||(service == 'R))でなければなりません。そうでなければ、条件は常に真です – Andreas

答えて

2

あなたが条件文の一部ではない、あなたのコード内return 0;を持っている、と述べました。私はあなたがあなたのif/elseステートメントの1つにreturnステートメントを挿入する必要があるかもしれないと仮定しています。

代わりに、return 0;の代わりにbreak;ステートメントを使用して、最初のループを終了することをお勧めします。

0

あなたの状態は論理的に正しくありません。 あなたがそれを変更する必要があります。他のforループ

while (service == 'r' || service == 'R') 

と同じ:

while (service == 'p' || service == 'P') 

オペレータ==は、オペレータ||よりも優先順位が高いです。
何が書かれていることはこれです:

while (service == 'r' || 'R') 

だから、あなたのケースでは、表現​​が最初に評価されます。
serviceの値を'p'とすると、式はfalseと評価されます。
次に、文字Rtrueと評価されるため、式false || 'R'が評価されます。これは常にtrueです。 したがって、条件は常にtrueで、常に最初のループを入力します。
2番目のループにも同じ問題があります。

0

あなたの最初のwhileの条件は常にtrueの入力であるためです。

while ((service == 'r') || 'R'))

E:

while (service == 'r' || 'R') 

はにequilaventです。G、入力'p'

while (('p' == 'r') || 'R')) 
while ((false || 'R'))  
while ((false || true)) // 'R' 's equivalent decimal is greater 
          //  than 0, so is always 'true' 
while (true) 

可能溶液:

while (service == 'r' || service == 'R') 
0

毎以来一度だけ実行されている間、

if (service == 'r' || service == 'R') 
最初一方の代わりに

、及び

を使用する方がよいです
if (service == 'p' || service == 'P') 

の代わりに2番目の。

whileループの考えは、文のブロックを0回以上実行することです。

0

whileループを使用する必要はありません。コードは1回だけ実行され、serviceの値はループ内で変更されません。以前のすべてがすでにservice == 'r' || service == 'R'
を使用するように説明してきたように
私の代わりにwhile

if(service == 'r' || service == 'R') 
{ 
    // your code 
} 
else if(service == 'p' || service == 'P') 
{ 
    //you code 
} 

ifelseifを使用するためにあなたを提案したいと思いますこの二つの条件内return 0;を削除します。
条件を複数回実行する場合は、ループを使用します。

複数回実行する場合は、ループ内でwhileループをそのまま使用し、ループ内でreturn 0;を削除してください。

関連する問題