diff --git a/lang_c/6/2__operator_if_else/article.md b/lang_c/6/2__operator_if_else/article.md index 9b73805..bf00581 100644 --- a/lang_c/6/2__operator_if_else/article.md +++ b/lang_c/6/2__operator_if_else/article.md @@ -24,11 +24,11 @@ int main(void) } ``` -Эта программа работае никак не проверяет данные, введённые пользователем. Поэтому, если ввести, например, числа `3.14 2.71`, то получим следующий результат: +Эта программа никак не проверяет данные, введённые пользователем. Поэтому, если ввести, например, числа `3.14 2.71`, то получим следующий результат: ![](./sum2_bad_input.png "Рис.1 Результат работы программы sum2 v.1.0 при вводе некорректных данных") -Проблема, как мы уже понимаем, возникает из-за того, что формат входные данные не соответствует формат-строке `"%d %d"`. Поэтому функция `scanf` запишет значение в переменую `a` и завершится. Давайте это проверим. +Проблема, как мы уже понимаем, возникает из-за того, что формат входных данных не соответствует формат-строке `"%d %d"`. Поэтому функция `scanf` запишет значение в переменную `a` и завершится. Давайте это проверим. Надеюсь, вы помните, что функция `scanf` в результате своей работы возвращает целое число -- количество переменных, в которые она успешно записала значения из входного потока. Модифицируем наш код, чтобы программа выводила значение, возвращаемое функцией `scanf`, на экран. @@ -124,10 +124,10 @@ int main(void) } ``` -Эта программа тоже выведет `TRUE!`. В этом примере управляющее выражения вычислять не требуется, т.к. оно уже записано в виде числового значения `3.14`. Т.к. это не нулевое значение (т.е. истина), то будет выполнена основная ветка конструкции `if-else`. +Эта программа тоже выведет `TRUE!`. В этом примере управляющее выражение вычислять не требуется, т.к. оно уже записано в виде числового значения `3.14`. Т.к. это не нулевое значение (т.е. истина), то будет выполнена основная ветка конструкции `if-else`. -Возвращаемся к программе `sum2`. Добавим в неё инструкцию `if-else`, которая будет проверять значение в переменной `values_read`. +Возвращаемся к программе `sum2`. Добавим в неё инструкцию `if-else`, которая будет проверять значение переменной `values_read`. Листинг 6. Программа sum2 v.1.2 ```c @@ -180,7 +180,7 @@ printf("%d + %d = %d\n", a, b, res); } ``` -Чувствую, что у вас возник немой вопрос: "В ветке `else` всего одна инструкция. Зачем её оборачиваться в фигурные скобки?" +Чувствую, что у вас возник немой вопрос: "В ветке `else` всего одна инструкция. Зачем её оборачивать в фигурные скобки?" С формальной точки зрения, конечно, скобки в этой ветке не нужны. Программа будет корректно работать и без них. Но я всё-таки рекомендую вам всегда использовать фигурные скобки в конструкции `if - else`, даже если в них нет необходимости. @@ -203,7 +203,7 @@ if (управляющее_выражение) Эта инструкция работает аналогично `if-else`, но с небольшим изменением, связанным с отсутствием побочной ветки `else`. -Вычисляется значение управляющего выражения. Если получается ИСТИНА, то выполняется `инструкция_1` из основной ветки, а если ложь, то инструкции из основной ветки игнорируются. А выполняется переходи к следующей инструкции, расположенная после инструкци `if`. +Вычисляется значение управляющего выражения. Если получается ИСТИНА, то выполняется `инструкция_1` из основной ветки, а если ложь, то инструкции из основной ветки игнорируются. А выполнение переходит к следующей инструкции, расположенной после инструкции `if`. Посмотрите на рисунок. ![Блок-схема инструкции if](./if_scheme.png "Рис.5 Блок-схема инструкции if") @@ -233,7 +233,7 @@ int main(void) Эта программа яркая иллюстрация того, когда сокращённая форма более удобна, нежели полная форма `if-else`. -Если пользователь ввёл отрицательное число, то у него надо заменить знак, что и происходит в основной ветке `if`. А вот если он ввёл нуль или положительное число, то с числом ничего делать не нужно, а значит ветвь `else` в данном конкретном случае нам вовсе не нужна. Программа же в этом случае пропускает всё, что записано в основной ветке, и переходит к выполнению следующей инструкции. +Если пользователь ввёл отрицательное число, то у него надо изменить знак, что и происходит в основной ветке `if`. А вот если он ввёл нуль или положительное число, то с числом ничего делать не нужно, а значит ветвь `else` в данном конкретном случае нам вовсе не нужна. Программа же в этом случае пропускает всё, что записано в основной ветке, и переходит к выполнению следующей инструкции. Можно было бы использовать и полную форму, но получилась бы менее изящная программа. @@ -291,7 +291,7 @@ int main(void) ## Вложенные инструкции if-else % **Важно!** -В ветках `if-else` можно использовать любые инструкции языка Си, в том числе и инструкции `if-else`. +В ветках `if-else` можно использовать любые инструкции языка Си, в том числе и `if-else`. Для демонстрации этой возможности, давайте решим [задачу про Квадранты](https://stepik.org/lesson/57210/step/13) из прошлого урока. diff --git a/lang_c/6/2__operator_if_else/meta.json b/lang_c/6/2__operator_if_else/meta.json index 4db80a5..7d2f274 100644 --- a/lang_c/6/2__operator_if_else/meta.json +++ b/lang_c/6/2__operator_if_else/meta.json @@ -1,6 +1,6 @@ { "title": "Инструкция if-else", -"description": "Подробный урок по условным инструкциям if и if-else в языке C. Изучаем базовый синтаксис, составные инструкции, вложенные конструкции и практические примеры обработки пользовательского ввода, проверки данных и ветвления программы.", +"description": "Подробный урок по условным инструкциям if и if-else в языке Си. Изучаем базовый синтаксис, составные инструкции, вложенные конструкции и практические примеры обработки пользовательского ввода, проверки данных и ветвления программы.", "keywords": "условные инструкции, инструкция if-else, инструкция if, условный оператор, оператор if-else, составные инструкции, вложенные if, каскад if-else-if, обработка ввода, проверка данных, ветвление программы", "canonical_link": "https://youngcoder.ru/lessons/6/operator_if_else" }