Вопрос
Когда-то давно я немного изучал C и C ++ в колледже, но я не уделял C ++ особого внимания.Теперь я хотел бы обратить некоторое внимание на C ++, но когда я использую getch()
функция, я получаю предупреждение снизу.
Предупреждение C4996:"гетч":Имя POSIX для этого элемента устарело.Вместо этого используйте имя, соответствующее стандарту ISO C ++:_гетч.Дополнительные сведения см. в онлайн-справке.
Теперь я использую VS 2005 express, и я не знаю, что делать с этим предупреждением.Мне нужно использовать getch()
после того , как я printf()
сообщение об ошибке или что-то еще, требующее нажатия клавиши.
Вы можете мне с этим помочь?
Решение
Корпорация Майкрософт решила пометить имя без подчеркивания устаревшим, поскольку эти имена зарезервированы для выбора программиста.Расширения, специфичные для реализации, должны использовать имена, начинающиеся с символа подчеркивания в глобальном пространстве имен, если они хотят придерживаться стандарта C или C ++, или они должны пометить себя как объединенную среду, совместимую со стандартом, такую как POSIX / ANSI / ISO C, где такая функция затем соответствует одному из этих стандартов.
Читать этот ответ о getcwd() также, для пояснения П.J.Плаугер, который, конечно, очень хорошо разбирается в вещах.
Если вам интересно только дождаться некоторых клавиш, введенных пользователем, на самом деле нет причин не использовать getchar
.Но иногда это просто более практично и удобно для пользователя в использовании _getch
и друзья.Однако они не указаны в стандарте C или C ++ и, таким образом, ограничат переносимость вашей программы.Имейте это в виду.
Другие советы
Если вы в C ++, почему printf
и getch
? Попробуйте вместо этого использовать cout
и cin.get
.
используйте _getch () вместо getch ()
Зачем тебе это? Почему бы не использовать getchar ()
, если вам нужно захватить один символ?
Как говорится в сообщении об ошибке, имя getch ()
устарело (так как это было расширение, специфичное для Microsoft), и вместо него рекомендуется _getch ()
. Я не уверен, где POSIX входит в это; POSIX не определяет getch ()
, но вместо этого включает в себя getchar ()
, как указано в стандарт ISO C (стр. 298, черновик связан с тем, что окончательный стандарт не является бесплатным). Решение состоит в том, чтобы сделать как предложено и использовать _getch ()
, или использовать стандартный C getchar ()
.
вы можете использовать " 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 << '
Он выводит 'a', если вы вводите 'a' на консоли.
<< endl; break;
}
Он выводит 'a', если вы вводите 'a' на консоли.