Как завершить программу с помощью Ctrl-D? - PullRequest
3 голосов
/ 30 декабря 2010

Я пытаюсь написать простую программу, которая имитирует калькулятор. Я хотел бы, чтобы программа выходила или отключалась при нажатии клавиши Ctrl + D . Я искал через stackoverflow и видел другие примеры Ctrl + C или Ctrl + A , но примеры в java и C.

для C:

(scanf("%lf", &var);

для Java, SIGINT повышается при нажатии Ctrl + Z .

signal(SIGINT,leave);  
    for(;;) getchar();

Мне интересно, что я могу сделать для Ctrl + D в C ++ ...

Спасибо всем!

Ответы [ 5 ]

3 голосов
/ 30 декабря 2010

Ctrl + D приведет к тому, что дескриптор файла stdin вернет конец файла.Любая функция чтения ввода отразит это, и вы сможете выйти из программы, когда достигнете конца файла.Кстати, пример C должен дословно работать на C ++, хотя, возможно, он не самый идиоматичный C ++.

Кстати, это домашняя работа?Если это так, пожалуйста, не забудьте пометить его как таковой.

1 голос
/ 07 февраля 2019

Если вам нужно завершить с Ctrl-D при чтении ввода.

 while ( std::cin ) // Ctrl-D will terminate the loop
{
  ...
}
0 голосов
/ 30 декабря 2010

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

Многие простые калькуляторные программы читают ввод как текст, оканчивающийся символом новой строки . Они анализируют текст в памяти, затем выкладывают ответ.

Другие более сложные калькуляторные программы используют окна и управляются событиями. Некоторые используют кнопку типа «=» для обозначения конца ввода и начала расчета (не работает на калькуляторах RPN).

Эти методы избавляют от хлопот, связанных с определением конца текста, используя последовательность управляющих символов, и являются более переносимыми.

0 голосов
/ 30 декабря 2010

В Unix терминал будет интерпретировать Ctrl + D (в пустой строке) как конец ввода;дальнейшее чтение с stdin вернет EOF, за которым вы можете наблюдать.

0 голосов
/ 30 декабря 2010

Ctrl + D на платформах Unixy - EOF. Если вы получаете каждый символ, вы можете проверить, есть ли у вас EOF.

...