-2

main.cpp

#include <iostream>
#include <vector>
#include <cstdlib>
#include <chrono>

using namespace std;
int randNum = 0;
int digit = 0;
int length = 0;
int choice = 0;
int remainder = 0;
int counter = 0;
int origArray[5] = { };
int reverseArray[5] = { };
int temporary = 0;
int index = 0;
bool repetition = true;

int main () {
    srand(std::chrono::duration_cast<std::chrono::milliseconds>
     (std::chrono::system_clock::now().time_since_epoch()).count()%2000000000);
    // needed to autograde some test cases in Mimir

    do {
        cout << "Enter number of digits in code (3, 4 or 5): ";
        cin >> choice;
        cout << endl;
    }   while ((choice != 0) && (choice != 3) && (choice !=4) && (choice !=5));
    switch (choice) {
    case 0: {
        cout << "Enter code: ";
        cin >> digit;
        cout << endl;
            while (digit > 0) {
                remainder = digit % 10;
                digit = digit / 10;
                origArray[counter] = remainder;
                counter++;
            }// while loop that separates digits in reverse
            cout << "Enter number of digits in code: " << endl;
            cin >> length;
            for (int i = 0; i < length; i++) {
                reverseArray[i] = origArray[length - i - 1];
            }// for loop that sets the digits in the right order
            cout << "Number to guess: ";
            for (int i = 0; i < length; i++) {
                cout << reverseArray[i];
                if (i < length-1)
                    cout <<"-";
            }// for loop that outputs the digits with a dash
    }// what runs when 0 is selected
    break;
    default: {
            while(temporary < choice) {
                repetition = false;
                randNum = rand() % 10;
                for (int i = 0; i < choice; i++) {
                    if (randNum == reverseArray[i])
                        repetition = true;
                }// for loop that sees if random number is equal to inputted 
digit value array
                if (repetition == false) {
                    reverseArray[index] = randNum;
                    index = index + 1;
                    repetition = repetition + 1;
                }// for loop that populates array with random digits
            }// while loop that goes through each index of array.
            cout << "Number to guess: ";
            for (int i = 0; i < choice; i++) {
                cout << reverseArray[i];
                if (i < choice-1)
                    cout <<"-";
            }//for loop that outputs the digits with a dash
            break;
        }// what happens when 3, 4, or 5 are selected
    }//switch statement
}

I am getting "cygwin_exception::open_stackdumpfile: Dumping stack trace to class4.exe.stackdump" whenever I run the default case. I am running it in eclipse.

This happens every now and then but I don't know why it only occurs sometimes.

I would appreciate any help since I didn't find useful info online.

Thanks

Kunal C
  • 1
  • 1
  • 1

1 Answers1

0

there is an "out of bound exception" at

reverseArray[index] = randNum;
index = index + 1;
repetition = repetition + 1;

which can be prevented by a range checking condition

if(0 <= index && index < 5){
    reverseArray[index] = randNum;
    index = index + 1;
    repetition = repetition + 1;
}

I'm not sure if this condition will change the logic of your code or not, then if you enter 0, it gives a sequence of numbers but for 3 or 4 or 5 it gives a huge loop almost like an infinite loop

Pedramphhi
  • 19
  • 2
  • Actually it was something else. The reverseArray[index] = randNum; should have been origArray[index] = randNum;. It works now but thanks for the help. – Kunal C Sep 30 '18 at 22:16