Список студентов и отмена набора - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Задача такая - сформировать список студентов, используя функцию, но так чтобы при нажатии клавиши ESC. формирование списка прекратилось. Прошаренные помогите пожалуйста).
#include<stdio.h>
#include<locale.h>
#include<string.h>
#include<windows.h>
#define N 3
#define M 25
 
char spisok_studentov();
 
int main()
{
    setlocale(0,"");
    system("chcp 1251 > nul");
    spisok_studentov();
    return 0;
}
 
char spisok_studentov()
{
    char a[N][M];
    int s=0, i=0, b[N][3];
    printf("Введите список студентов\n");
    while(i<N)
    {
    i++;
    printf("%d - ",i);
    scanf("%s",&a[i-1][0]);
//  printf(" Для продолжения нажмите любую клавишу\n для выхода нажмите ESC!\n"); - этот кусок требует дополнительного запроса.
//  if (getch()==0x00001b) break;
    }
P.S.: Не пойму как совместить scanf(или getchar) и код клавиши getch() так чтобы не было дополнительного запроса на клавишу. то есть вводишь студента, нажимаешь Enter (код 010 если помните по таблицам кодировки символов) и сразу цифра второго студента. Нужно нажать ESC(кода в таблице кодировки символов нет). чтобы ввод прекратился.
собственно вопрос давно меня интересовал и актуален для любой программы. просто на примере этой спрашиваю
вопрос ещё актуален. как можно прервать цикл клавишей ESC запрашивающий ввод списка с клавиатуры?
ап!

Решение задачи: «Список студентов и отмена набора»

textual
Листинг программы
#include<stdio.h>
#include<windows.h>
#define N 10
#define M 27
 
int main()
{
    int i=0, j;
    char a[N][M];
    system("chcp 1251 > nul");
    printf("Введите слово\n");
    do
    {
        for(i=0;i<M;i++)
        {
        a[j][i]=getchar();      
        if(a[j][i]==10) break;
        }
        j++;
        printf("%s\n",a[i][0]);
    printf("Введите следующее слово: ");    
    }   while(a[j][i]!=27);
    
    return 0;
    
}

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

Вывод списка с номерами до 20 элементов:

  1. Включаются необходимые заголовочные файлы
  2. Определяются константы N и M (размер массива)
  3. Объявляется переменная i для итерации по массиву и переменная j для индекса
  4. Создается массив a[N][M] для хранения введенных символов
  5. Команда system(chcp 1251 > nul) меняет кодировку консоли на CP-1251
  6. Выводится сообщение Введите слово
  7. Запускается цикл do-while, который выполняется до тех пор, пока не будет введено слово 27
  8. Внутри цикла do-while, используется вложенный цикл for для заполнения массива a[j][i] значениями, введенными пользователем
  9. Значение 10 в цикле for используется для прерывания цикла, когда вводится символ новой строки
  10. Значение 27 в цикле do-while используется для прерывания цикла, когда вводится слово 27
  11. После каждой итерации цикла do-while выводится текущее слово, введенное пользователем
  12. После каждой итерации цикла do-while выводится сообщение Введите следующее слово:
  13. По завершении цикла do-while программа возвращает 0, что означает успешное завершение
  14. Ввод списка символов и команд обрабатывается в соответствии с кодировкой CP-1251 Список переменных и их значений:
  15. i - индекс для итерации по массиву (0)
  16. j - индекс для итерации по массиву (0)
  17. a[N][M] - массив символов (размер N на M)
  18. getchar() - функция для получения ввода пользователя (значение введенного символа)
  19. a[j][i] - текущее значение введенного символа
  20. 10 - символ новой строки (или ASCII 10)
  21. 27 - символ 27 (или ASCII 27)
  22. printf() - функция для вывода информации на консоль
  23. system() - функция для выполнения системных команд
  24. chcp 1251 > nul - системная команда для изменения кодировки консоли на CP-1251
  25. Введите слово - сообщение, выводимое на консоль
  26. Введите следующее слово: - сообщение, выводимое на консоль после каждого введенного слова
  27. 27 - слово, которое пользователь должен ввести для выхода из программы
  28. CP-1251 - кодировка, используемая для ввода и вывода символов
  29. ASCII 10 - числовое значение символа новой строки
  30. ASCII 27 - числовое значение символа 27
  31. 0 - значение, которое возвращает функция main() в случае успешного завершения
  32. N - размер первого измерения массива (10)
  33. M - размер второго измерения массива (27)
  34. Размер массива - количество элементов в массиве (N на M)

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


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

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

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