1

Тема: Приклад з книги Шильдта не працює.

Є код з книги Шильдта С++ Базовый курс, ст.99, код видає при любому значенні один результат.

Код Шильдта:

// Програма "Вгадай магічне число": 
// остання версія.

#include <iostream>
#include <cstdlib>

using namespace std;

void play(int m);

int main()
{

    setlocale(LC_CTYPE, "ukr");

    int option, magic;

    magic = rand();

    do {
        cout << "1. Отримати нове магiчне число\n";
        cout << "2. Пограти\n";
        cout << "3. Вийти з програми\n";
        do {
            cout << "Введи свiй варiант: ";
            cin >> option;
        } while (option > 1 || option < 3);

        switch (option) {
            case 1:
                magic = rand();
                break;
            case 2:
                play(magic);
                break;
            case 3:
                cout << "Допобачення!!!\n";
                break;
        }
    } while (option != 3);

    getchar();
}

// Пограємо в гру.
void play(int m)
{
    int t, x;

    for (t = 0; t < 100; t++) {
        cout << "Вгадай магiчне число: ";
        cin >> x;
        if (x == m){
            cout << "**Правильно**\n";
            getchar();
        }
        else
            if (x < m) cout << "Мало.\n";
            else cout << "Багато\n";
    }
    cout << "Ти використав всi шанси вгадати число.\n";
    cout << "Спробуй знову!";

    getchar();
}

Та мій варіант (теж такий самий результат):

// Програма "Вгадай магічне число": 
// остання версія.

#include <iostream>
#include <cstdlib>

using namespace std;

void play(int m);

int main()
{

    setlocale(LC_CTYPE, "ukr");

    int option, magic;

    magic = rand();

    do {
        cout << "1. Отримати нове магiчне число\n";
        cout << "2. Пограти\n";
        cout << "3. Вийти з програми\n";
        do {
            cout << "Введи свiй варiант: ";
            cin >> option;
        } while (option > 0 && option < 4);

        switch (option) {
            case 1:
                cout << magic;
                break;
            case 2:
                play(magic);
                break;
            case 3:
                cout << "Допобачення!!!\n";
                break;
        }
    } while (option != 3);

    getchar();
}

// Пограємо в гру.
void play(int m)
{
    int t, x;

    for (t = 0; t < 100; t++) {
        cout << "Вгадай магiчне число: ";
        cin >> x;
        if (x == m){
            cout << "**Правильно**\n";
            getchar();
        }
        else
            if (x < m) cout << "Мало.\n";
            else cout << "Багато\n";
    }
    cout << "Ти використав всi шанси вгадати число.\n";
    cout << "Спробуй знову!";

    getchar();
}

https://replace.org.ua/misc.php?action=pun_attachment&amp;item=935

Post's attachments

Снимок_2015_07_13_11_55_54_540.png 14.05 kb, 150 downloads since 2015-07-13 

2 Востаннє редагувалося 0x9111A (13.07.2015 12:58:49)

Re: Приклад з книги Шильдта не працює.

Вдумайтесь добре в те, що має робити цей цикл.

do {
    cout << "Введи свiй варiант: ";
    cin >> option;
} while (option > 1 || option < 3);

А має він, у випадку некоректного (не з діапазону [1,3]) значення друкувати запит ще раз, хоча зараз він чомусь робить все навпаки і друкує повторний запит при коректному значені.

спочатку подумайте сам
while (option < 1 || option > 3)
Подякували: koala, leofun012

3

Re: Приклад з книги Шильдта не працює.

Скачав 3-є видання Шильдта, там

} while (option < 1 || option > 3);

Добра порада: використовуйте тільки знак < (тобто щоб ліве завжди малося на увазі меншим за праве), тоді цей вираз читатиметься легше:

} while (option < 1 || 3 < option);

Одразу видно, що це опис умови, де option знаходиться за межами відтинку [1, 3].
Крім того, якщо використовуєте rand(), то використовуйте також і srand... втім, це, скорше за все, буде пізніше в книзі.

Подякували: Yola, leofun013

4

Re: Приклад з книги Шильдта не працює.

а книжка куплена чи з інтернету скачана і як небуть засканована ?