Список студентов и отмена набора - C (СИ)
Формулировка задачи:
Всем привет! Задача такая - сформировать список студентов, используя функцию, но так чтобы при нажатии клавиши ESC. формирование списка прекратилось.
Прошаренные помогите пожалуйста).
P.S.: Не пойму как совместить scanf(или getchar) и код клавиши getch() так чтобы не было дополнительного запроса на клавишу.
то есть вводишь студента, нажимаешь Enter (код 010 если помните по таблицам кодировки символов) и сразу цифра второго студента. Нужно нажать 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;
}
собственно вопрос давно меня интересовал и актуален для любой программы. просто на примере этой спрашиваю
вопрос ещё актуален. как можно прервать цикл клавишей 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 элементов:
- Включаются необходимые заголовочные файлы
- Определяются константы N и M (размер массива)
- Объявляется переменная i для итерации по массиву и переменная j для индекса
- Создается массив a[N][M] для хранения введенных символов
- Команда system(
chcp 1251 > nul) меняет кодировку консоли на CP-1251 - Выводится сообщение
Введите слово - Запускается цикл do-while, который выполняется до тех пор, пока не будет введено слово
27 - Внутри цикла do-while, используется вложенный цикл for для заполнения массива a[j][i] значениями, введенными пользователем
- Значение 10 в цикле for используется для прерывания цикла, когда вводится символ новой строки
- Значение 27 в цикле do-while используется для прерывания цикла, когда вводится слово
27 - После каждой итерации цикла do-while выводится текущее слово, введенное пользователем
- После каждой итерации цикла do-while выводится сообщение
Введите следующее слово: - По завершении цикла do-while программа возвращает 0, что означает успешное завершение
- Ввод списка символов и команд обрабатывается в соответствии с кодировкой CP-1251 Список переменных и их значений:
- i - индекс для итерации по массиву (0)
- j - индекс для итерации по массиву (0)
- a[N][M] - массив символов (размер N на M)
- getchar() - функция для получения ввода пользователя (значение введенного символа)
- a[j][i] - текущее значение введенного символа
- 10 - символ новой строки (или ASCII 10)
- 27 - символ
27(или ASCII 27) - printf() - функция для вывода информации на консоль
- system() - функция для выполнения системных команд
chcp 1251 > nul- системная команда для изменения кодировки консоли на CP-1251Введите слово- сообщение, выводимое на консольВведите следующее слово:- сообщение, выводимое на консоль после каждого введенного слова27- слово, которое пользователь должен ввести для выхода из программы- CP-1251 - кодировка, используемая для ввода и вывода символов
- ASCII 10 - числовое значение символа новой строки
- ASCII 27 - числовое значение символа
27 - 0 - значение, которое возвращает функция main() в случае успешного завершения
- N - размер первого измерения массива (10)
- M - размер второго измерения массива (27)
Размер массива- количество элементов в массиве (N на M)