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();
}
Post's attachments

Снимок_2015_07_13_11_55_54_540.png 14.05 kb, 68 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)

Maybe a = Just a | Nothing
Подякували: koala1

3

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

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

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

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

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

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

Подякували: Yola, Ярослав2

4

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

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

- Поганому трояну фаєрвол заважає
- Ніколи не програмуйте та не пийте пиво
Якщо ви з першого разу написали програму, в якій немає жодної помилки, повідомте про це системного програмісту: він виправить помилки в компіляторі