1

Тема: Приклад з книги Шильдта по створенню безпечного масиву.

// Простий спосiб органiзацiї безпечного масиву.

#include <iostream>
using namespace std;

int &put(int i); // Записуємо значення в масив.
int get(int i); // Зчитуємо значення з масиву.

int vals[10];
int error = -1;

int main()
{
    
    setlocale(LC_CTYPE, "ukr");
    
    put(0) = 10; // Записуємо значення в масив.
    put(1) = 20;
    put(9) = 30;
    
    cout << get(0) << ' ';
    cout << get(1) << ' ';
    cout << get(9) << ' ';

    // А тепер спецiально генеруємо помилку.
    put(12) = 1; // iндекс за межами масиву.

    getchar();
}

// Функцiя занесення значення в масив.
int &put(int i)
{
    if (10 > i >= 0) // або if(i>=0 && i<10).
        return vals[i]; // Повертаємо посилання на i-й елемент.
    else {
        cout << "Помилка порушення кордонiв!\n";
        return error; // Повертаємо посилання на error.
    }
}

// Функцiя зчитування значення з масиву.
int get(int i)
{
    if (10 > i >= 0) // або if(i>=0 && i<10).
        return vals[i]; // Повертаємо посилання на i-й елемент.
    else {
        cout << "Помилка порушення кордонiв!\n";
        return error; // Повертаємо посилання на error.
    }
}

Проблема в тому що коли я захотів записати умову:

if(i>=0 && i<10)

на:

if (10 > i >= 0)

Програма не відображає останнього результату:

Помилка порушення кордонiв!.

Де в моєму виразі збій логіки?

2 Востаннє редагувалося Betterthanyou (13.08.2015 21:46:19)

Re: Приклад з книги Шильдта по створенню безпечного масиву.

if (10 > i >= 0)

заміни на

if (10 > i && i >= 0)
Подякували: leofun012

3 Востаннє редагувалося koala (14.08.2015 06:24:06)

Re: Приклад з книги Шильдта по створенню безпечного масиву.

На питання "що робити" вже відповіли, додам відповідь на пряме питання: вираз

(10 > i >= 0)

розглядається, як

((10 > i) >= 0)

Перший вираз - булівський, має значення true або false. При порівнянні з числом він представляється як 1 (true) або 0 (false); а оскільки 0 >= 0 і 1 >= 0, весь вираз завжди буде істинним.

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