2017-01-25 1 views
0

Есть ли функция, которая заставляет программу командной строки ждать, как system("pause"), и продолжает работать только после принятия определенного ключа?C++ - Пауза программа до тех пор, пока не будет нажата определенная клавиша

+2

вы можете взглянуть на [Ncurses] (https://www.gnu.org/ программное обеспечение/ncurses /) – George

+0

Вы имеете в виду, как переходить через код по одной строке за раз? – ArmenB

+1

Не в стандартной библиотеке C++. –

ответ

2

Если вы ждете символа новой строки, есть простой и переносимый способ сделать это. Просто используйте getline.

Если вы хотите получать другие символы, не получив сначала первую строку, тогда все будет менее переносимым. В системах Unix вам нужно установить свой терминал в «сырой режим». Как отмечается в замечании Джорджа, ncurses - это простой способ сделать это, плюс он предоставляет удобные функции для рисования вещей в определенном месте на терминале, получения произвольных ключей и т. Д.

В Windows вам нужно будет использовать его console interface. Разумеется, это невозможно использовать за пределами Windows.

Как замечают Нейл Баттерворт, есть также версия проклятий, которая работает для Windows, называемая PDCurses. Если вам нужно написать программное обеспечение, которое работает как для Unix, так и для Windows, это хороший вариант для преследования.

+1

проклятия также доступны в Windows - http://pdcurses.sourceforge.net/ –

0

Если getline и ncurses не работают для вас, всегда есть conio.h и getch(). Есть некоторые проблемы с этим, как объяснено в этом ответе Why can't I find <conio.h> on Linux?

Удачи.

0

на интерфейсе консоли Windows Функция getche() будет ждать нажатия клавиши перед дальнейшим исполнением.

+0

Кажется, вы не поняли мой вопрос. Я хотел бы знать, есть ли функция, похожая на getch(), но работает только для определенного ключа. – Twilight053

0

Если вы работаете в Windows, вы можете использовать kbhit(), который является частью библиотеки времени выполнения Microsoft. Если вы на Linux, вы можете реализовать kbhit таким образом

#include <stdio.h> 
#include <termios.h> 
#include <unistd.h> 
#include <fcntl.h> 

int kbhit(void) 
{ 
    struct termios oldt, newt; 
    int ch; 
    int oldf; 

    tcgetattr(STDIN_FILENO, &oldt); 
    newt = oldt; 
    newt.c_lflag &= ~(ICANON | ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0); 
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); 

    ch = getchar(); 

    tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
    fcntl(STDIN_FILENO, F_SETFL, oldf); 

    if(ch != EOF) 
    { 
    ungetc(ch, stdin); 
    return 1; 
    } 

    return 0; 
} 

Компиляция шаги:

gcc -o kbhit kbhit.c 

При запуске с

./kbhit 

Это побуждает вас нажатия клавиши, и завершает работу при нажмите клавишу (не ограничиваясь клавишами «Ввод» или «Печать»).

(Got через Интернет - вы можете изменить код и использовать конкретные значения сп как \ п для Enter ключ)

Смежные вопросы