C: Завершение программы путем нажатия клавиши

Пара более возможных причин для использования потоков:

  1. Ваша платформа испытывает недостаток в асинхронных операциях ввода-вывода, например, Windows Me (Никакие порты завершения или перекрытый ввод-вывод, боль при портировании приложений XP, которые используют их.) Java 1.3 и ранее.
  2. сторонняя библиотечная функция А, которая может зависнуть, например, если удаленный сервер снижается, и библиотека не обеспечивает способа отменить операцию, и Вы не можете изменить его.

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

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

5
задан Michael Myers 29 October 2009 в 18:38
поделиться

9 ответов

getc (stdin); переносится в этом смысле

8
ответ дан 18 December 2019 в 09:50
поделиться

Использование нестандартной функции ввода-вывода - неплохая практика как таковой ; это становится проблемой, если вы собираетесь перенести этот код на другую платформу, не поддерживающую getch () .

Проблема в том, что нет стандартных библиотечных функций , которые обнаруживают отдельные нажатия клавиш ( getchar () и fgetc () буферизированы и требуют нажатия Войдите, прежде чем они вернутся); для этого вам придется использовать что-то нестандартное. Если вы собираетесь запускать этот код только на этой конкретной платформе, используйте getch () , если это то, что вам нужно, и просто помните, что это решение не обязательно применимо к другим платформам. Если вы намереваетесь перенести этот код на платформы, которые не поддерживают getch () , изолируйте системный вызов функции-оболочки, чтобы при переносе кода требовался только код внутри функции-оболочки. изменить.

int getKeystroke(void)
{
  /**
   * Put platform-specific call here
   */
  return getch();
}

int main(void)
{
  ... // do stuff here
  getKeystroke();
  return 0;
}
4
ответ дан 18 December 2019 в 09:50
поделиться

Я предпочитаю запускать программу из командной строки.

1
ответ дан 18 December 2019 в 09:50
поделиться

getchar () является стандартным, но из-за буферизации строки вам все равно нужно будет нажать Enter , прежде чем getchar вернется.

1
ответ дан 18 December 2019 в 09:50
поделиться

Я думаю, что использование getch () на сегодняшний день является наиболее распространенным способом предотвращения закрытия окна консоли, но в C ++ наиболее опытные программисты рекомендуют вам использовать cin.get

 std::cin.get();

вместо:

getch();
1
ответ дан 18 December 2019 в 09:50
поделиться

Вы используете компилятор Turbo C? Здесь широко используется getch () .

OTOH, если вы хотите, чтобы программа ждала, запустите двоичный файл внутри оболочки / терминала / приглашения. Перейдите в этот каталог и вызовите

Windows:

C:> executable.exe

Linux:

~$ ./exec

Вы можете использовать getchar () , единственная проблема заключается в том, что он буферизуется. getch () не буферизуется. Вы можете сделать getchar () небуферизованным, но код для этого того не стоит. Я попробовал это однажды, но из-за его большой сложности никогда не удосужился попробовать это снова.

0
ответ дан 18 December 2019 в 09:50
поделиться

В дополнение к другим ответам вы также можете использовать это в Windows, особенно если вы собираетесь дождаться нажатия клавиши для завершения программы:

system("pause");
0
ответ дан 18 December 2019 в 09:50
поделиться

Просто попробуйте ответить на другой вопрос, вы можете использовать

while (1) sleep (10);

в конце основной функции (до return 0; ), а затем вы можете нажать ctrl-c, чтобы завершить программу. Я думаю, вы не должны сталкиваться с проблемой переносимости, и я надеюсь, что это тоже неплохая практика программирования :)

0
ответ дан 18 December 2019 в 09:50
поделиться

Вы можете исправить окно терминала, чтобы оно не исчезало.

2
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: