С++ программа для устного счета

155
21 ноября 2021, 18:10

почему-то выбирает действие кроме деления почему ???

#include <iostream>//подключаем стандартную библеотеку
#include <ctime>//библеотека для работы с рандомными числами и временем
using namespace std;
int main () {
    int random1, random2, randop, tanswer, answer, t= 0, diapoz;//числовые переменные
    string name;//символьная переменная
    bool over = true, dia = true;//
    {
        cout <<"как тебя зовут?"<<endl;
        cin >> name;// спрашивает и запоминает имя
        cout<< "Привет "<< name <<endl;
        cout <<"Я хочу сыграть с тобой в одну игру на устный счет. Правила простые я задаю тебе пример на сложение , вычитанее или умножение. За каждый праввильный будет прибавляться по 1 очку"<<endl;
    v://точка спавн
        cout <<"выбери дипозон чисел (выбери номер варианта): 1) от 0 до 10 2) от 0 до 100."<<endl;
        cin >> diapoz;//спрашивает диапозон чисел
        while (over) {
        if (diapoz == 1) {//проверяет если diapoz будет равен 1 то он будет выполнять следущую команду
            srand (time(NULL));
            random1 = rand () %  11;//генерирует случайные числа от 0 до 10
            random2 = rand () %  11;
        }
        if (diapoz == 2) {
            srand (time(NULL));
            random1 = rand () %  101;// генерирует случайные числа от 0 до 100
            random2 = rand () %  101;
        }
            if (diapoz != 1 && diapoz != 2) {//проверяет если diapoz будет не равен 1 или 2 то он выполняет следущую команду
                cout <<"непонятная команда!"<<endl;
                goto v;//перекидывает на точку v:
        }
         cout <<"Поехали!\n_______________________"<<endl;
        randop = rand() % 3 +1;//генерирует случайное действие + - * или /
        switch (randop) {
            case 1: ;
                tanswer = random1 + random2;
                cout <<random1<< "+"<<random2<<endl;// +
                break;
            case 2: ;
                tanswer = random1 - random2;
                cout <<random1<< "-"<<random2<<endl;// -
                break;
            case 3: ;
                tanswer = random1 * random2;
                cout <<random1<< "*"<<random2<<endl;// *
                break;
            case 4: ;
                tanswer = random1 / random2;
                cout <<random1<< "/"<<random2<<endl;// /
                break;
        }
        cin >> answer;//спрашивает ответ
        if (answer == tanswer) {//проверяет ваш ответ с другим ответом
            cout <<"Правильно!\n_____________________________";
            cout <<"\n\n";
            t++;//прибавляет по 1 баллу
        }
        else {//иначе если то действие не выполнилось то он выполняет это
            cout <<"Неправильно!  Ответ:"<<tanswer<<endl;
            cout <<"__________________\n\n";
            cout <<"у тебя "<< t <<" правильных ответов"<<endl;
            over = false;//заканчивает игру
        }
        }
    }
    return 0;
}
Answer 1

Будте очень внимательны с не инициализированными переменными. Например если

randop = rand() % 4;

получит значение 0, то в switch-case вы не попадете ни в оду из ветвей, и переменная tanswer останется не инициализированной, те будет содержать мусор.

Проверка if (answer == tanswer) в таком случае очень опасна, поэтому ваша программа и работает через раз.

The variable 'tanswer' is being used without being initialized.

И отмечу, что от goto лучше избавиться, едва ли вы встретите этот оператор в любых других программах. В вашем случае вместо метки goto целесообразно использовать цикл while с проверкой выхода по достижению правильного ответа

READ ALSO
Как записать в вектор значения?

Как записать в вектор значения?

Как записать в вектор значение из cin?

188
Параллельное программирование С++

Параллельное программирование С++

Задание было, написать программу и распараллелить ее, само задание звучит так : Задана последовательность, состоящая только из символов >, < и -Требуется...

70
Сравнение строк в C++

Сравнение строк в C++

Задали сделать массив структур, в котором ведомости про поезда (по названиям переменных думаю всё понятно)Нужно чтобы программа выводила...

101
Поиск по нескольким полям класса

Поиск по нескольким полям класса

Подскажите, пожалуйста, статьи, примеры кода и тп

105