We have to write this code for class, but I am getting an out-of-range error from the part of code below. It is supposed to be like a simon-says thing, where the letter you have to type in is the same. The exact error I'm getting is:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 1) >= this->size() (which is 1)
Abort (core dumped).
#include <iostream> // for I/O
#include <cstring> // for strlen()
#include <cstdlib> // for random numbers
#include <unistd.h> // for sleep()
using namespace std;
int main(int argc, char **argv) {
const int DEFAULT_NUMBER_OF_ROUNDS = 15;
int numRounds = DEFAULT_NUMBER_OF_ROUNDS;
// if a command line argument is given, use that string to init the
// "random" sequence and set the number of rounds to play the game
if (argc == 2) {
numRounds = strlen(argv[1]);
}
string s; // A string used to pause the game
char *seq = new char[numRounds]; // Sequence of numRounds colors to match
char colors[] = "RGBY"; // Allowable colors
bool lost = false; // Indicates whether we win or lose
int round; // Indicates the current round
// Initialize random number generator
srand(time(0));
// Determine the random color sequence using either argv[1] or
// randomly determined letters from 'R', 'G', 'B', and 'Y'
for (int j = 0; j < numRounds; j++) {
seq[j] = (argc == 2) ? argv[1][j] : colors[rand() % 4];
}
// Wait until the player is ready
cout << "Welcome to Simon, press enter to play .... ";
getline(cin, s, '\n');
//code
string input;
cout << flush;
int I;
round = 1;
while(!lost){
for(i = 0 ; i < round; i++){
cout << "Simon says: " << seq[i] << flush;
sleep(1);
cout << "\010." << flush << endl;
}
cout << "Please enter " << round << " characters to match ";
cin >> input;
if (numRounds <= round){
cout << "you won" << endl;
}
for(i = 0; i < round; i++);{
if(input.at(i) != seq[i]){
lost = true;
}
}
cout << "you lost" << endl;
cout << "the correct sequence was ";
for(int i = 0; i < round; i++){
cout << seq[I];
}
return 0;
}
}