2017-07-29 47 views
-3

函数或条件错误,在getval()的右花括号处出现错误可能是由于while循环中的条件造成的,但为什么请告诉错误原因,在这个问题中我需要输入5个测试从0到100之间的用户评分,这就是为什么我包含getval()中循环的某些条件,如果我排除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

此代码充斥着全局变量,并且违反了[Zero,One或Infinity Rule](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个独立的循环来输入和检查每个值(现在如果一个值不正确,用户将被要求再次输入所有值);
  2. sub1 ...... sub5貌似很好的候选人是阵列sub[5]
  3. 中的项目是不是一个好的风格来使用全局变量从一个函数传递到另一个数据
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

非常感谢,这个社会是新程序员的天堂:) –