1

Тема: Не розумію де помилка((

[code=C++]#include <iostream>
using namespace std;
int a, b, c;
class CDice
{
public:
   
    int sides()
    {
        int n; cin >> n;
        return n;
    }
    int throwing()
    {
        int score; score = rand() % sides() + 1;
        return score;
    }
   
};
int sum(int e, int r, int t)
{
    int suma;
    suma = e + r + t;
    return suma;
}
int main()
{

    setlocale(LC_ALL, "russian_Russia.1251");
    CDice dice1;
    CDice dice2;
    CDice dice3;
    cout << "** Будем считать что каждая сторона N имеет по N очков ** " << endl;
    cout << "Задайте количество сторон кости (1) " << endl; dice1.sides();
    cout << "Задайте количество сторон кости (2) " << endl; dice2.sides();
    cout << "Задайте количество сторон кости (3) " << endl; dice3.sides();
    int choice;
    while (true)
    {
        cout << "=====================" << endl;
        cout << "Виберите действие" << endl;
        cout << "=====================" << endl;
        cout << "Виберите 1, если хотите посмотреть последних випапавших очков и их сумму." << endl;
        cout << "Виберите 2, если хотите бросить кости." << endl;
        cout << "Виберите 3, если хотите вийти из программи." << endl;
        cin >> choice;
        if (choice == 1)
        {
            cout << "Очко кости 1 = " << a << endl;
            cout << "Очко кости 2 = " << b << endl;
            cout << "Очко кости 3 = " << c << endl;
            cout << "_________________" << endl;
            cout << "Загальний счет = " << sum(a, b, c) << endl;
        }
        if (choice == 2)
        {
           
            a = dice1.throwing();
            cout << "Ви бросили кость 1 , ее очко = " << a << endl;
            b = dice1.throwing();
            cout << "Ви бросили кость 2 , ее очко = " << b << endl;
            c = dice1.throwing();
            cout << "Ви бросили кость 3 , ее очко = " << c << endl;
        }
        if (choice == 3)
        {
            break;
        }
    }
    system("pause");
}

/*при виводі у консоль , коли вводжу 1 - все добре(умова виконується правильно),а коли виводжу 2 - відбувається баг, як мені його уникнути. P.s: підкажіть як встановити українську мову , а то найшов варіант тільки російської setlocale(LC_ALL, "russian_Russia.1251");*/[/code]

Post's attachments

ffff.jpg 276.21 kb, 164 downloads since 2018-03-20 

2

Re: Не розумію де помилка((

Користуйтеся будь ласка тегом CODE а також, вам ні що не заважає писати українською.
Також не дуже зрозуміло чому ви вважаєте поведінку програми "багом". Ви взагали в "свій" код дивилися?
Якщо не зважати на такі ляпи як глобальні змінні та т.п. він працює саме так як ви написали.
По перше, оцей фрагмент безглуздий:

    cout << "Задайте количество сторон кости (1) " << endl; dice1.sides();
    cout << "Задайте количество сторон кости (2) " << endl; dice2.sides();
    cout << "Задайте количество сторон кости (3) " << endl; dice3.sides();

Ви викликаєте функцію, яка модифікує локальну змінну. Якщо вам потрібно запамьятати кількість сторін  - то треба зробити змінну классу та користуватися замість функції от тут:

  
int score; score = rand() % sides() + 1;

Загалом не треба писати в бидлостайлі - ви можете зразу обьявити змінну та присвоїти значення

  int score = rand() % sides() + 1;

Замість if використовувайте switch, а також будьте уважні ви юзаете один й той обьєкт у пункту 2

Подякували: METALICOS2

3

Re: Не розумію де помилка((

Де завдання? Що саме має робити метод sides()? Взагалі дуже раджу розділяти хоча б методи введення, оброби і виведення; тобто мають бути, якщо ви вже робите так, скажімо,
void CDice::input();//встановлює параметри кубика
int CDice::cast();//отримати викинуте число
void CDice::tell();//вивести опис кубика
А ще краще - тримати методи введення і виведення ззовні, а кубик хай "спілкується" виключно всередині програми.
Де тег code?
Чому суржикоросна мова?
Якщо це Windows, то локаль "Ukrainian" (чи "Ukrainian_Ukraine.1251", чи "uk-UA" - на смак):
https://msdn.microsoft.com/uk-ua/library/cc233982.aspx
https://msdn.microsoft.com/uk-ua/library/hzz3tw78.aspx

Подякували: METALICOS2