Пересечение условий при выполнении условного оператора - C (СИ)
Формулировка задачи:
Доброго времени суток.
Начну немного издалека.
Решил я заняться изучением какого-нибудь языка программирования из-за интереса и чисто для себя.
Сначала решил изучать Си, так как сам давно и активно пользуюсь Linux и *BSD, но наткнулся на одно обсуждение, в котором говорилось,
что появился такой язык, как rust, задача которого как раз состоит в том, чтобы заменить в будущем Си. Это меня заинтересовало и я подумал, что неплохо было бы ознакомиться с этим языком. Скачал учебник, начал читать. Оказалось всё мало понятным. Но написал по учебнику одну программу и даже пару строк от себя добавил, где смог.
Дело в том, что учебник, как я понял, рассчитан на тех, кто уже знаком как минимум с одним языком программирования, поэтому его принцип таков - минимум объяснений и в бой, писать программу. По крайней мере мне так показалось.
И та, программа, которая приводилась в учебники rust, называлась что-то типа "угадай число".
Скачал я себе несколько каких-то небольших pdf'ок по программированию на Cи, почитал немного и, в конечном итоге, решил написать уже на Си эту самую программу "угадай число". Благо на Си всё как-то понятнее и родней.
Программа, естественно простая, но у меня возникли кое-какие вопросы.
Вот, собственно она.
Вопрос такой. Я хочу, чтобы при приближении к загаданному числу игрок получал что-то типа подсказки "Уже теплее".
Но если я ввожу ещё один условный оператор, условием в котором для печати данного сообщения будет что-то типа b < 5 || b > 50, то происходит пересечение с предыдущими условиями, так как b < 5 уже входит в условие a > b и условие b > 50 уже входит в условие a < b.
Подскажите, кто знает, как с этим бороться или где почитать на этот счёт.
#include <stdio.h>
int main(void)
{
int a = 10;
int b;
printf("\n\nЯ загадал число. Попробуй его угадать!\n\n");
printf("Введите ваше число: ");
scanf("%d", &b);
while ( a != b )
{
if ( a < b )
{
printf("Ваше число слишком БОЛЬШОЕ. Повторите попытку: ");
scanf("%d", &b);
}
if ( a > b )
{
printf("Ваше число слишком маленькое. Повторите попытку: ");
scanf("%d", &b);
}
}
printf("Вы угадали! Секретное число это %d", a);
getchar();
getchar();
}Решение задачи: «Пересечение условий при выполнении условного оператора»
textual
Листинг программы
d = a-b;
while (d != 0)
{
if (d < -5) printf("Большое\n");
else if (d < 0) printf("Большое, близко\n");
else if (d < 5) printf("Маленькое, близко\n");
else prinf("Маленькое\n");
printf("Введите новое число: ");
scanf("%d", &b);
d = a-b;
}
Объяснение кода листинга программы
- Сначала вводится значение переменной
aи сохраняется в соответствующей переменной. - Затем вводится значение переменной
bи сохраняется в соответствующей переменной. - Вычисляется разница между значениями переменных
aиbи результат сохраняется в переменнойd. - Запускается цикл while, который будет выполняться до тех пор, пока значение переменной
dне станет равным нулю. - Внутри цикла проверяется значение переменной
d. - Если
dменьше -5, то выводится сообщениеБольшое. - Если
dменьше 0 и больше или равно -5, то выводится сообщениеБольшое, близко. - Если
dменьше 5 и больше или равно 0, то выводится сообщениеМаленькое, близко. - Если
dменьше 5 и больше или равно 0, то выводится сообщениеМаленькое. - После вывода сообщения запрашивается ввод нового числа и сохраняется в переменной
b. - Вычисляется новое значение переменной
dкак разница между значениями переменныхaиb. - Цикл while повторяется с шага 5.
- Код выполняется до тех пор, пока значение переменной
dне станет равным нулю. - Если ввод числа некорректен (например, ввод символов вместо числа), то программа может завершиться с сообщением об ошибке.
- Ввод новых чисел продолжается до тех пор, пока не будет достигнуто условие цикла while.
- Значения переменных
aиbобновляются каждый раз при вводе нового числа. - Выводимые сообщения зависят от текущего значения переменной
d. - Если значение переменной
dстановится равным нулю, то цикл while завершается. - Если ввод числа некорректен, программа может завершиться с сообщением об ошибке.
- Код может быть оптимизирован или изменен для улучшения его функциональности или эффективности.