Getch устарел
Где-то во времени я делал несколько C и С++ в колледже, но я не обращал много внимания на С++. Теперь я хочу обратить внимание на С++, но когда я использую функцию getch()
, я получаю предупреждение снизу.
Предупреждение C4996: 'getch': Имя POSIX для этого элемента устарело. Вместо этого используйте имя ISO С++: _getch. Подробнее см. Интерактивную справку.
Теперь я использую VS 2005 express, и я не знаю, что делать с этим предупреждением. Мне нужно использовать getch()
после я printf()
сообщение об ошибке или что-то еще, требующее нажатия клавиши.
Можете ли вы мне помочь?
Ответы
Ответ 1
Microsoft решила отметить это имя без подчеркивания, поскольку эти имена зарезервированы для выбора программистом. Для реализации конкретных расширений должны использоваться имена, начинающиеся с символа подчеркивания в глобальном пространстве имен, если они хотят придерживаться стандарта C или С++ - или они должны отмечать себя как объединенную стандартную среду, такую как POSIX/ANSI/ISO C, функция соответствует одному из этих Стандартов.
Прочитайте этот ответ о getcwd(), для объяснения П. Дж. Плаугера, который хорошо знает материал, конечно.
Если вам интересно только ждать некоторых ключей, набранных пользователем, действительно нет причин не использовать getchar
. Но иногда это просто более практично и удобно для пользователя использовать _getch
и друзей. Однако они не указаны стандартом C или С++ и, таким образом, ограничивают переносимость вашей программы. Помните об этом.
Ответ 2
Если вы находитесь на С++, почему printf
и getch
? Вместо этого используйте cout
и cin.get
.
Ответ 3
используйте _getch() вместо getch()
Ответ 4
Зачем вам это нужно? Почему бы не использовать getchar()
, если вам нужно захватить один символ?
Ответ 5
Как говорится в ошибке, имя getch()
устарело (поскольку это было расширение для Microsoft), а вместо этого рекомендуется _getch()
. Я не уверен, где POSIX входит в него; POSIX не определяет getch()
, но вместо этого включает getchar()
, как указано стандарт ISO C (стр. 298, проект связан с тем, что окончательный стандарт не является бесплатным). Решение должно было бы сделать так, как было предложено, и использовать _getch()
, или использовать стандартный C getchar()
.
Ответ 6
Вы можете использовать "std :: getc (stdin);". Это работает как 'getch();' в моих программах. Я думаю, что это хорошая альтернатива для getch(). Если я ошибаюсь, скажите мне.
#include <cstdio>
switch (std::getc(stdin)) {
case 'a': cout << 'a' << endl ; break;
case 'b': cout << 'b' << endl ; break;
default: cout << '$' << endl; break;
}
Он выводит "а", если вы вводите "а" на консоли.