Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
I1van
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
1

Выход из программы по нажатию клавиши ESC

28.01.2014, 20:59. Просмотров 2006. Ответов 5
Метки нет (Все метки)

Здравствуйте! Программа, которая собирает данные и записывает в файл.
Как сделать так, чтобы в любом месте можно было выйти из программы по нажатию клавиши ESC? Как я понял нужно создавать поток, в котором постоянно проверяется нажата ли клавиша ESC и если нажата то завершается процесс. Только как это все организовать не понимаю.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#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;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 20:59
Ответы с готовыми решениями:

Выход из цикла по нажатию клавиши
Возможно ли этот кусок кода приспособить к выходу из цикла не по воду -1 в m а по вводу допустим...

Выход из программы по нажатию клавиши
сосбна что делать, если в кодблоке при компиляции программы во время нажатия клавиши, указывающей...

Выход из цикла по Esc
Народ, помогите разобраться. Пытаюсь выйти из цикла по нажатию esc, но код не работает... int...

Как выйти из цикла при нажатии клавиши ESC
Доброго времени дня. Поясните, как выйти из цикла при нажатии клавиши ESC void GetStr() {...

Выход из программы по нажатию клавиши Esc
Здравствуйте. Есть программа c циклом. Используется Graph ABC. begin repeat .....сам код.......

5
palva
3401 / 2449 / 528
Регистрация: 08.06.2007
Сообщений: 8,696
Записей в блоге: 4
28.01.2014, 23:34 2
Если вам поручили сделать именно так, то изучайте работу с потоками.
Если вы хотите сделать это по своей инициативе, то не делайте так. Это нелогично и некорректно. Файл не закроется правильно, могут пропасть данные и т. д.
0
I1van
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
29.01.2014, 07:12  [ТС] 3
А как тогда сделать без дополнительного потока?
0
palva
3401 / 2449 / 528
Регистрация: 08.06.2007
Сообщений: 8,696
Записей в блоге: 4
29.01.2014, 10:46 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

А такой вариант не устроит? или вам нужно обязательно клавишу Esc.
C
1
2
3
4
5
printf( "Введите штрих-код или "\s"\ для окончания работы: " );
scanf( "%14s", Bar );
if(Bar[0]=='s' && Bar[1]==0) {
    // Оформить окончание работы.
}
0
I1van
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 3
29.01.2014, 12:26  [ТС] 5
Так то устроит, но я хочу понять как именно выйти из любого места программы, и обязательно ли для этого нужен доп. поток ?
0
palva
3401 / 2449 / 528
Регистрация: 08.06.2007
Сообщений: 8,696
Записей в блоге: 4
29.01.2014, 13:54 6
Если программа выполняет ввод-вывод с консоли, то нажатие Ctrl-C завершит программу. Если программа что-то вычисляет (циклится) то снять ее можно только из другого потока или процесса.
0
29.01.2014, 13:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 13:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выход из программы по нажатию Esc
подскажите как сделать чтобы по нажатию ESC выводился результат.затупил чутка int main(){...

Оформить и обработать в виде события выход из программы при нажатии клавиши Esc
Ребят, помогите пожалуйста &quot;оформить и обработать в виде события выход из программы при нажатии...

Выход из программы по нажатию клавиши
Добрий день товарищи!! Вот к этой задачи нужно дописать строчку, чтобы при нажатие клавиши или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.