我已经回收了一项作业,以便在课堂上进一步练习和发展我的编程技巧,而且我在另一个Do While循环中遇到了3 DO WHILE循环的问题。
我试图拒绝test1,2和3的小于1且大于100的测试分数。 我遇到循环没有处理我为Test1 / 2/3输入的内容。它允许超出while范围的值通过。是否有人可以建议或看到我可能做错了什么?提前谢谢你们!
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double computeavg (int a, int b, int c);
char lettergrade (double z);
int main ()
{
double test1, test2, test3, average; //test1/2/3, test scores, Average: average of test scores
double tottest1=0, tottest2=0, tottest3=0, avg1, avg2, avg3; //tottest# - sum of test grades collected for that number test, avg# average for first second or third test
int student=0, avgvar; //average variable, Student number
char grade, ans; // Holds a letter grade, holds a response to a question
do{
student=student+1;
cout<<"Hello Student #"<<student<<endl;
do{
cout<<"Please input test 1 Grade ";
cin>> test1;
}
while(test1>=1||test1<=100);
do{
cout<<"Please input test 2 Grade ";
cin>> test2;
}
while(test2>=1||test2<=100);
do{
cout<<"Please input test 3 Grade ";
cin>> test3;
}
while(test3>=1||test3<=100);
average=computeavg (test1, test2, test3);
cout<<setprecision(0)<<fixed;
cout<<"Your Average is: "<<average<<endl;
tottest1=tottest1+test1;
tottest2=tottest2+test2;
tottest3=tottest3+test3;
grade = lettergrade(average);
cout << "Your grade is " << grade << endl;
cout<<"Do you want to grade another student? (y/n)";
cin>>ans;
cout<<"\n";
} while(ans=='y');
答案 0 :(得分:0)
我认为您需要更改do,如下所示:
做{
cout<<"Please input test 1 Grade ";
cin>> test1;
}
while(test1<1||test1>100);
答案 1 :(得分:0)
你的条件落后了。仔细看:while(test3>=1||test3<=100)
。 所有数字至少满足条件的一部分。例如,-4不大于或等于1,但 小于或等于100,并且因为您的条件与||
运算符连接,即< em>或运算符,条件的计算结果为true。
您需要更改条件。这是作业,所以我不会准确地告诉你应该使用什么条件。
您可以使用调试器自行发现此问题。您也可以通过手动仔细浏览您的程序来发现它。获取铅笔和一些纸张,并记下变量的当前值。跟踪您所处的指示,然后按计划进行操作。变量更改时,将其旧值删除并记下新值。最终,你能够在脑海中做到这一点,但是当你正在学习时,将其写下来会有所帮助。