Выход из цикла по Escape - C (СИ)
Формулировка задачи:
Есть небольшой текст программы
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define BOT_BORDER 1
#define UP_BORDER 10
#define QUIT 0
int main(int argc, const char **argv, const char **env)
{
int num1, num2, answ1=1;
const unsigned short bb = BOT_BORDER, bu = UP_BORDER;
unsigned short i;
system("chcp 1251 > nul");
// моделируем большую поляризацию
srand((unsigned)time(NULL));
rand();
printf("Программа-экзаменатор произведения двух чисел. (0 - выход)\n");
for(i=0; answ1!=QUIT ; ++i)
{
fflush(stdin);
//генерируем два случайных числа
num1=rand()%(bu-bb+1)+bb;
num2=rand()%(bu-bb+1)+bb;
printf(" %d) %d * %d = ", i+1, num1, num2);
//читаем и сразу же сравниваем ответ
scanf(" %d", &answ1) && answ1 == num1*num2 && printf("Ответ верный!\n") ||
answ1 == QUIT && printf("Завершение работы программы!\n") ||
printf("Ответ не верный.\n");
};
system("pause > nul");
return 0;
}Что она делает
: генерит два рандомных числа от верхней границы до нижней, спрашивает у пользователя его версию ответа и сравнивает со своей.Чего я хочу
: выход из цикла у меня организован вводом "0". Но это не совсем красиво, хотелось бы допустим ESC, но сравнивая имеющийся код int-a с 0x001B он отказывается выдавать true. Проблему, как мне кажется в том что считываю данные именно scanf-ом а нужено getchar-ом. Но если взять 2-ое получается ломается суть задачи т.к. у программы могут быть ответы 2х значные 10-ые цифры. Как решить не прибегая к дополнительному запросу пользователя на выход?Решение задачи: «Выход из цикла по Escape»
textual
Листинг программы
scanf("%d", &answ1);
if(getchar() == QUIT_ESC || answ1 == QUIT)
Объяснение кода листинга программы
- Пользователю предлагается ввести число с помощью функции scanf.
- Функция getchar используется для получения следующего символа ввода пользователя.
- Если следующий символ ввода пользователя является символом Esc (QUIT_ESC), то выполнение программы завершается.
- Если введенное пользователем число равно QUIT, то выполнение программы также завершается.
- Если ни одно из вышеуказанных условий не выполняется, то программа продолжает работу, и пользователю предлагается ввести новое число.