Cześć. Muszę zrobić zadanie/ grę. Treść brzmi tak :
Napisz grę, która będzie losowała dowolne litery z alfabetu i wyświetlał je na ekranie, a zadaniem gracza jest podać szybko odpowiadający jej kod ascii. Fragment programu odpowiedzialny za zadawanie pytań i sprawdzanie odpowiedzi użytkownika jest zamknięty w funkcji, która zwraca liczbę całkowitą – sumaryczną liczbę sekund, jakiej użytkownik potrzebował, żeby udzielać odpowiedzi na serię pytań. Może zdarzyć się, że użytkownik poda niewłaściwy kod ASCII, ale to nie powoduje przerwania gry. Dopiero w przypadku popełnienia przez użytkownika drugiej pomyłki zamiast kolejnego pytania rzucany jest wyjątek, który jest przechwycony dopiero w funkcji main. W ramach obsługi wyjątku użytkownik dostaje pytanie, czy chce spróbować jeszcze raz i jeżeli tak – funkcja zadająca pytania jest ponownie wywoływana.
Mój błąd polega na tym, że gdy program dojdzie 2 raz do wyjątku(do linijki z throw) to wywala błąd i zatrzymuje program. Kod poniżej. Z góry dzięki za pomoc.
#include <ctime>
#include <fstream>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 5
using namespace std;
double czas()
{
char litery[N];
int litera;
srand(time(NULL));
int i, j;
int licznik = 0;
time_t start, finish;
for (i = 0; i < N; i++)
{
litery[i] = (char)(rand() % 24) + 65;
j = (rand() % 2); //litery alfabetu
if (j)
{
litery[i] += (97 - 65);
}
}
time(&start);
for (int k = 0; k < N; k++)
{
cout << "\nWylosowana litera to: ";
cout << litery[k] << endl;
cout << "Prosze podac liczbe kodu ASCI odpowiadajaca literze alfabetu wyswietlanej na ekranie: ";
cin >> litera;
if (litera == (int)litery[k])
{
cout << "Podano poprawna odpowiedz.\n " << endl;
}
else
{
cout << "Podano bledna odpowiedz.\n " << endl;
licznik++;
}
if (licznik == 2)
{
cout << "Popelniono 2 bledy. \n";
throw licznik;
}
}
time(&finish);
double czas= difftime(finish, start);
return czas;
}
int main()
{
cout << "Przystepuje do testu. (Czas liczony od momentu wyswietlenia 1 litery." << endl;
time_t actual = time(0);
cout << "Czas: " << asctime(localtime(&actual));
try
{
double wynik=0;
wynik = czas();
cout << "Czas gry wynosi: " << wynik << " sekund" << endl;
}
catch (int licznik)
{
cout << "Czy chcesz sprobowac jeszcze raz? ";
double wynik=0;
wynik = czas();
cout << "Czas gry wynosi: " << wynik << " sekund" << endl;
}
return 0;
}