Выход из цикла по 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)

Объяснение кода листинга программы

  1. Пользователю предлагается ввести число с помощью функции scanf.
  2. Функция getchar используется для получения следующего символа ввода пользователя.
  3. Если следующий символ ввода пользователя является символом Esc (QUIT_ESC), то выполнение программы завершается.
  4. Если введенное пользователем число равно QUIT, то выполнение программы также завершается.
  5. Если ни одно из вышеуказанных условий не выполняется, то программа продолжает работу, и пользователю предлагается ввести новое число.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы