Pregunta

En algún lugar en el tiempo hice algo de C y C ++ en la universidad, pero no le presté mucha atención a C ++. Ahora deseo prestar atención a C ++, pero cuando uso la función getch () , recibo la advertencia de abajo.

  

Advertencia C4996: 'getch': el nombre POSIX de este elemento está en desuso. En su lugar, utilice el nombre conforme a ISO C ++: _getch. Consulte la ayuda en línea para más detalles.

Ahora, estoy usando VS 2005 express, y no sé qué hacer con esta advertencia. Necesito usar getch () después de que printf () aparezca un mensaje de error o alguna otra cosa que requiera un golpe de tecla.

¿Puedes ayudarme con eso?

¿Fue útil?

Solución

Microsoft decidió marcar el nombre sin subrayar en desuso, porque esos nombres están reservados para que el programador los elija. Las extensiones específicas de la implementación deben usar nombres que comiencen con un guión bajo en el espacio de nombres global si desean adherirse al estándar C o C ++, o deben marcarse como un entorno compatible estándar combinado, como POSIX / ANSI / ISO C, donde tal La función corresponde a uno de esos estándares.

Lea esta respuesta sobre getcwd () también, para una explicación de PJ Plauger, quien sabe muy bien las cosas, por supuesto.

Si solo está interesado en esperar algunas teclas escritas por el usuario, realmente no hay razón para no usar getchar . Pero a veces es más práctico y conveniente para el usuario utilizar _getch y amigos. Sin embargo, estos no están especificados por el estándar C o C ++ y, por lo tanto, limitarán la portabilidad de su programa. Ten eso en cuenta.

Otros consejos

Si estás en C ++, ¿por qué printf y getch ? Considere utilizar cout y cin.get en su lugar.

use _getch () en lugar de getch ()

¿Por qué necesitas esto? ¿Por qué no usar getchar () si necesita capturar un solo carácter?

Como dice el error, el nombre getch () está en desuso (ya que era una extensión específica de Microsoft), y se recomienda _getch () . No estoy seguro de dónde entra POSIX; POSIX no define getch () , sino que incluye getchar () como se especifica en norma ISO C (página 298, borrador vinculado porque la norma final no es gratuita). La solución sería hacer lo que se sugiere y usar _getch () , o usar el C getchar () estándar.

puede usar " std :: getc (stdin); " ;. Funciona como 'getch ();' en mis programas Creo que es una buena alternativa para 'getch ()' Si me equivoco, dime.

#include <cstdio>

switch (std::getc(stdin)) {
    case 'a':   cout << 'a' << endl ; break;
    case 'b':   cout << 'b' << endl ; break;
    default:    cout << '

Muestra 'a' si ingresa 'a' en la consola.

<< endl; break; }

Muestra 'a' si ingresa 'a' en la consola.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top