2017-07-29 4 views
-3

getval()の中かっこで機能エラーまたは条件エラーが発生するwhileループの条件が原因である可能性がありますが、エラーの理由を教えてください。 この質問には5つのテストを入力する必要があります0から100までの間でなければならないユーザーからの得点で、getval()でdo whileループに条件を含める理由です。do whileループを除外してプログラムを正常に実行すると、エラーの理由を教えてください。機能または条件エラー

#include <iostream> 

using namespace std; 
int sub1, sub2, sub3, sub4, sub5, lwst; 

void getval() 
{ 
    do{ 
     cin >> sub1; 
     cin >> sub2; 
     cin >> sub3; 
     cin >> sub4; 
     cin >> sub5; 
    } while ((sub1 < 101 && sub1 >= 0) && 
     (sub2 < 101 && sub2 >= 0) && 
     (sub3 < 101 && sub3 >= 0) && 
     (sub4 < 101 && sub4 >= 0) && 
     (sub5 < 101 && sub5 >= 0) 
     ) 
} 


int findlowest() 

{ 
    int s1 = sub1; 
    int s2 = sub2; 
    int s3 = sub3; 
    int s4 = sub4; 
    int s5 = sub5; 
    int temp = 0; 

    while (s1&&s2&&s3&&s4&&s5) 
    { 
     s1--; 
     s2--; 
     s3--; 
     s4--; 
     s5--; 
     temp++; 
    } 
    return temp; 

} 
void calavg() 
{ 
    cout << "average is " << (sub1 + sub2 + sub3 + sub4 + sub5 - lwst)/4; 
} 


int main() 
{ 
    cout << "enter the test score , marks from 0 to 100\n"; 
    getval(); 
    lwst = findlowest(); 
    calavg(); 

    return 0; 
} 
+2

*何*エラー?必ず、エラーメッセージを含めてください。また、コードを適切にインデントして、それをよりよくフォローすることも可能です。 –

+1

'getval'のあなたのwhile-conditionの最後の閉じ右括弧の後にセミコロンがありません。 IOエラーも完全に無視していますが、これは別の問題です。 – WhozCraig

+0

このコードはグローバル変数で詰め込まれていますが、[ゼロ、1または無限大](https://en.wikipedia.org/wiki/Zero_one_infinity_rule)に違反しています。関連することが意図されている場合は、それらの整数値に 'std :: vector'を使用してください。 – tadman

答えて

0

私はそれがsintax誤りであると仮定 - あなたはwhile;を失います。機能getvalは次のようにする必要があり

:それはコンパイル後

void getval() 
{ 
    do{ 
     cin >> sub1; 
     cin >> sub2; 
     cin >> sub3; 
     cin >> sub4; 
     cin >> sub5; 
    } while ((sub1 < 101 && sub1 >= 0) && 
     (sub2 < 101 && sub2 >= 0) && 
     (sub3 < 101 && sub3 >= 0) && 
     (sub4 < 101 && sub4 >= 0) && 
     (sub5 < 101 && sub5 >= 0) 
     ); 
} 

、このwhileループで条件を変更することを検討 - 私は、OR(||)を仮定し、あなたがに値を入力するようにユーザーを強制的にしたい場合は、より適しているであろうレンジ0..100 - 例えば:

void getval() 
{ 
    do{ 
     cin >> sub1; 
     cin >> sub2; 
     cin >> sub3; 
     cin >> sub4; 
     cin >> sub5; 
    } while ((sub1 < 0 || sub1 > 100) || 
      (sub2 < 0 || sub2 > 100) || 
      (sub3 < 0 || sub3 > 100) || 
      (sub4 < 0 || sub4 > 100) || 
      (sub5 < 0 || sub5 > 100) 
      ); 
} 

そして後であっても改善のポイントがたくさんあること:

  1. 私は5つの独立したループを入力して各値をチェックすることを好みます(1つの値が間違っていると、すべての値を再度入力するよう求められます)。別の
から
  • sub1 ... sub5配列sub[5]
  • 内の項目であることを良い候補のように見える、一つの関数からのデータを渡すために、グローバル変数を使用するように良いスタイルではありません
  • 0

    あなたの条件付きでwhileを取り消す必要があります。

    do{ 
         cin>>sub1; 
         cin>>sub2; 
         cin>>sub3; 
         cin>>sub4; 
         cin>>sub5; 
    } while(! ((sub1<101 && sub1>=0)&& 
          (sub2<101 && sub2>=0)&& 
          (sub3<101 && sub3>=0)&& 
          (sub4<101 && sub4>=0)&& 
          (sub5<101 && sub5>=0))); 
    

    条件コードを関数に移動すると、コードがわかりやすくなります。

    do{ 
         cin>>sub1; 
         cin>>sub2; 
         cin>>sub3; 
         cin>>sub4; 
         cin>>sub5; 
    } while(! variables_within_limits(sub1, sub2, sub3, sub4, sub5)); 
    

    としての機能を実装します。

    bool variables_within_limits(int sub1, int sub2, int sub3, int sub4, int sub5) 
    { 
        return (sub1<101 && sub1>=0)&& 
          (sub2<101 && sub2>=0)&& 
          (sub3<101 && sub3>=0)&& 
          (sub4<101 && sub4>=0)&& 
          (sub5<101 && sub5>=0); 
    } 
    
    +0

    ありがとう、この社会は新しいプログラマーのために天国です:) –

    関連する問題