Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Философия программирования на C++ Выпуск 12. Условия 2.


Здравствуйте, уважаемые подписчики!

Сегодня мы продолжим рассматривать условия, о которых говорили в прошлом выпуске. Как всегда, сначала пример, а потом много текста:

#include <iostream>

using namespace std;

int main() {
    // Сначала все идет, как в прошлом выпуске
    int a = 0;
    int b = 0;
    int action = 0;
    cout << "1. + Sum" << endl;  // 1 - сложить
    cout << "2. * Multiply" << endl;  // 2 - умножить
    cout << "3. / Divide"
<< endl;  // 3 - разделить
    cout << "4. - Sub" 
<< endl;  // 4 - вычесть
    cout << "Please, enter your action: ";
    cin >> action;
    cout << "Enter two numbers: ";
    cin >> a >> b;
    float result = 0.;
    // А здесь мы немного все изменим
    // Для начала запишем все более компактно
    if (1 == action)  // А здесь пишем сначала число, почему - см. ниже
        result = a + b;
    if (2 == action)
        result = a * b;
    if (3 == action)
        result = a / b;
    if (4 == action)
        result = a - b;
    // А теперь проверим, если пользователь ввел любое другое число
    if (action < 1)
        cout << "Incorrect action!" << endl;  // Пользователь ввел некорректное действие
    if (action > 4)
        cout << "Incorrect action!" << endl;  // Пользователь ввел некорректное действие
    // Но к сожалению все равно выводим результат
    cout << "Result: " << result << endl;  // Выводим результат
}

Итак, что мы здесь сделали? Во-первых, в условиях на проверку равенства мы везде поставили число, с которым сверяем, слева. Это одна из техник, позволяющая избежать глупых ошибок, которые встречаются достаточно часто - и что самое страшное, очень сложно ищутся.

Дело в том, что запись if (action = 1) является корректной и компилятор спокойно скомпилирует ваш код. Что же это за строчка такая? Здесь сначала в переменную action будет записано число 1, а затем это число будет использоваться как результат проверки условия (вместо условия можно ставить любое число - все, что не ноль, считается правильным  условием), и условие сработает. Вот код, который показывает, как можно использовать числа в условиях:

#include <iostream>

using namespace std;

int main() {
    if (1)  // Число 1 - выполненное условие (обозначается true - правда)
        cout << "This is 1" << endl;
    if (0)  // Число 0 - невыполненное условие (обозначается false - ложь)
        cout << "This is 0" << endl;
    if (-1)  // Вообще все числа, кроме нуля, являются "правдой" (true)
        cout << "This is -1" << endl;
    if (1000)
        cout << "This is 1000" << endl;
    int a = 10;
    if (a)  // Можно использовать и численную переменную
        cout << "This is a: " << a << endl;
    if (a = 1)  // И даже так - присвоить значение 1 и потом проверить условие
        cout << "This is a = 1: " << a << endl;
}

Поэтому запись в виде if (1 == action) позволяет избежать этой ошибки, поскольку (1 = action) - некорректная запись (мы не можем присвоить числу какое-то значение).

В конце первой программы мы добавили еще два условия - проверка, если a меньше 1 и больше 4 (таких чисел пользователю вводить нельзя). Эта проверка осуществляется с помощью операторов > (больше) и < (меньше).

Все операторы сравнения ==, <, > возвращают "правдивость условия" - то есть true (правда, истина) - в случае правильности условия, и false (ложь) - в случае неверного условия. Если внутри скобок if будет false (кстати можно даже записать if(false) ) - то блок if не выполнится, и программа пойдет дальше. Если true ( if(true) - такая запись тоже возможна) - то он выполнится.

Условия - это довольно большая и важная тема, поэтому мы поговорим о них еще.

Спасибо всем, до следующих выпусков! 

 


В избранное