Home > database >  Program doesn't execute for loop until the end
Program doesn't execute for loop until the end

Time:11-21

I'm writing a code to enter subjects' information where I put void function and array as an object. But not sure when I wanna loop it, it doesn't come until the end. Have a look at the code.

void calculateCGPA::getGPA() {
    cout << "Enter the the name of the subject: ";
    cin >> subjectName;
    cout << "Enter the credit hour:";
    cin >> credithour;
    cout << "Enter the grade: ";
    cin >> grade;
}

int main () {
    for (year=1; year<=4; year  ) {
        for (sem=1; sem<=2; sem  ) {
            cout << "Enter total subject you take in Year " << year << " Semester " << sem <<": ";
            cin >> totalSubjectSem;
            calculateCGPA ob[totalSubjectSem];
            for(int i = 1; i <= totalSubjectSem; i  ) {
                cout << "Subject " << i << ": \n";
                ob[i].getGPA();
              }
        }
    }
    
return 0;   
}

enter image description here

Here's the error. You can see the compiler only shows until entering the subject name but credit hour and grade are omitted. What should I do?

Expected: It should everything in void function until 3 (since I put 3) and then start over again "Enter total subject you take in Year 1 sem 2" but it also omits that

CodePudding user response:

Take note that in C 0 is the first element, and n-1 is the last element. By looping to n, you cause a buffer overflow, hence resulting an error.

A solution would be as follows

void calculateCGPA::getGPA() {
    cout << "Enter the the name of the subject: ";
    cin >> subjectName;
    cout << "Enter the credit hour:";
    cin >> credithour;
    cout << "Enter the grade: ";
    cin >> grade;
}

int main () {
    for (year=0; year<4; year  ) {
        for (sem=0; sem<2; sem  ) {
            cout << "Enter total subject you take in Year " << year << " Semester " << sem <<": ";
            cin >> totalSubjectSem;
            calculateCGPA ob[totalSubjectSem];
            for(int i = 0; i < totalSubjectSem; i  ) {
                cout << "Subject " << i << ": \n";
                ob[i].getGPA();
              }
        }
    }
}

CodePudding user response:

calculateCGPA ob[totalSubjectSem];

It's GCC extension called Variable-length automatic arrays and not valid C (because totalSubjectSem is not const). Use std::vector<calculateCGPA> instead.

for(int i = 1; i <= totalSubjectSem; i ) {

Indices start from 0 and going to array_length - 1. On last iteration you reading out of array bounds and program is crashing.

  •  Tags:  
  • c
  • Related