简体   繁体   中英

Need help defining a Loop Control Variable (while loops) C++

I have been trying forever to figure out what loop control variable (LCV) to use for my program to work but I have been unsuccessful.

The information given is as follows:

You will be promoting a student for grades and credits for courses taken. From that, you will calculate a GPA.

  • The course name is prompted for, but nothing is done with it.
  • We are just using the grades A, B, C, D, and F so you won't have to do so much typing!
  • You will need to use the "set precision" command as shown in the book. Set it to "fixed" and "2".
  • You will need to use the "cin.ignore()" function as discussed earlier in the course.

Notes

  • I used int total to count the number of classes.
  • Current while statement was my last attempt, and it is not correct.

My code:

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main () {

   cout << std::fixed << std::setprecision(2);
   string course, grade, answer;
   int credits, total = 0;
   float gradePoints = 0, totalCredits = 0;
   float gpa = 0.0;

   while (grade <= "ABC") { 
   cout << "Enter a course name: ";
   getline(cin, course);
   cout << course << endl;

   cout << "Enter number of credits: ";
   cin >> credits;
   cout << credits << endl;

   cout << "Enter your grade (A, B, C, D, F): ";
   cin >> grade;
   cout << grade << endl;

   cout << "Continue ('Yes' or 'No')? ";
   cin >> answer;
   cout << answer << endl;

   if (grade == "A") {
       gradePoints = gradePoints + 4;
   }
   else if (grade == "B") {
       gradePoints == gradePoints + 3; 
   }
   else if (grade == "C") {
       gradePoints = gradePoints + 2;
   }
   else if (grade == "D") {
       gradePoints = gradePoints + 1;
   }
   else if (grade == "F") {
       gradePoints = 0;
   }
   total = total + 1;
   totalCredits = totalCredits + credits;
   }

   gpa = (total * gradePoints)/ totalCredits;


   return 0;
}

Based on the way the rest of the program is written, I'd think that you'd want to check against the user's response to the "Continue?" question. Something like this:

bool answer = true;
while (answer) {
    // code

    // when ready to exit...
    answer = false;
}

That said, it might make more sense to use a do-while loop, where the first block executes before the conditional is checked:

do {
  // code
} while (answer != "No");

And while you're at it, you might also want to consider using a different flag than having the user type in "Yes" or "No". Something like y and n is more common and a bit simpler.

"while (grade <= "ABC")"

如果意图是仅在等级为A或B或C的情况下执行循环,则:

while(grade == "A" || grade == "B" || grade == "C")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM