Выход из программы по нажатию клавиши ESC - C (СИ)
Формулировка задачи:
Здравствуйте! Программа, которая собирает данные и записывает в файл.
Как сделать так, чтобы в любом месте можно было выйти из программы по нажатию клавиши ESC? Как я понял нужно создавать поток, в котором постоянно проверяется нажата ли клавиша ESC и если нажата то завершается процесс. Только как это все организовать не понимаю.
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
char Bar[14], bar[19], Name[100], Prace[11];
FILE *basa;
char cContinue( void )
{
char key;
printf( "Нажмите любую клавишу чтобы продолжить или ESC для выхода\n" );
key = getch();
return key;
}
int main( void )
{
int i, b;
setlocale( LC_ALL, "RUS");
do
{
b = 0;
printf( "Введите штрих-код: " );
scanf( "%14s", Bar );
fflush( stdin );
if( Bar[13] != 0 )
{
b = 1; Bar[13] = 0;
}
for( i = 0; i < 13 && b != 1; i ++ )
{
if( Bar[i] < '0' || Bar[i] > '9' )
{
b = 1; break;
}
}
if( b == 1 ) { printf("Ошибка! Некорректный штрих-код!\n"); continue; }
basa = fopen( "BarDB.txt", "r" );
while( fscanf( basa, "%s", bar ) > -1 )
{
if( strcmp( Bar, bar ) == 0 )
{
printf( "Такой Штрих-код уже есть!\n" );
b = 1; break;
}
fscanf( basa, "%s" );
fscanf( basa, "%s" );
}
fclose( basa );
if( b == 1 ) continue;
printf( "Введите название товара: " );
fgets( Name, 99, stdin );
fflush( stdin );
for( i = 0; i < 99 && Name[i] != 0; i++ )
{
if( Name[i] == '\n' )
{
Name[i] = 0;
break;
}
}
do
{
i = 0; b = 0;
printf( "Введите цену на товар: " );
scanf( "%10s", Prace );
fflush( stdin );
while( Prace[i] != 0 )
{
if( Prace[i] < '0' && Prace[i] != ',' || Prace[i] > '9' )
{
printf("Ошибка! Некорректная цена!\n");
b = cContinue(); break;
}
i++;
}
}
while( b != 27 && b != 0 ); if( b == 27 ) break;
basa = fopen( "BarDB.txt", "a" );
fprintf( basa, "%s\t", Bar );
fprintf( basa, "%s\t\t", Name );
fprintf( basa, "%s\n", Prace );
fclose( basa );
}
while( cContinue() != 27 );
return 0;
}Решение задачи: «Выход из программы по нажатию клавиши ESC»
textual
Листинг программы
printf( "Введите штрих-код или "\s"\ для окончания работы: " );
scanf( "%14s", Bar );
if(Bar[0]=='s' && Bar[1]==0) {
// Оформить окончание работы.
}
Объяснение кода листинга программы
- Программа запрашивает у пользователя ввод штрих-кода или
sдля окончания работы. - Пользователь вводит штрих-код или
s. - Программа проверяет введенные данные. Если первый символ равен 's' и второй символ равен 0, то выполняется код в блоке if.
- В блоке if выполняется оформление окончания работы.