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;
}

Он выводит "а", если вы вводите "а" на консоли.