Pergunta

Em algum lugar de volta no tempo eu fiz alguma C e C ++ na faculdade, mas eu não consegui muitos atenção para C ++. Agora eu gostaria de prestar atenção ao C ++, mas quando eu estou usando a função getch(), fico com a advertência de baixo.

Aviso C4996: 'getch': O nome POSIX para este item é obsoleto. Em vez disso, usar nome conformant a ISO C ++: _getch. Consulte a ajuda online para obter mais informações.

Agora, estou usando o VS 2005 express, e eu não sei o que fazer com este aviso. Eu preciso usar getch() depois que eu printf() uma mensagem de erro ou qualquer outra coisa que requer um sucesso chave.

Você pode me ajudar com isso?

Foi útil?

Solução

Microsoft decidiu marcar o nome sem sublinhado obsoleta, porque esses nomes são reservados para o programador para escolher. extensões de implementação específicos devem usar os nomes que começam com um sublinhado no espaço global se querem aderir ao padrão C ou C ++ - ou devem marcar-se como um ambiente compatível com padrão combinada, como POSIX / ANSI / ISO C, onde tal função, então corresponde a um desses padrões.

Leia esta resposta sobre getcwd () também, para uma explicação por PJ Plauger, quem sabe coisas muito bem, é claro.

Se você está interessado apenas para esperar por algumas teclas digitadas pelo usuário, não há realmente nenhuma razão para não usar getchar. Mas às vezes é apenas mais prático e conveniente para o usuário para uso _getch e amigos. No entanto, aqueles que não são especificados pelo padrão C ++ ou C e, assim, limitar a portabilidade do seu programa. Tenha isso em mente.

Outras dicas

Se você estiver em C ++, por printf e getch? Considere o uso de cout e cin.get vez.

uso _getch () em vez de getch ()

Por que você precisa disso? Por que não usar getchar() se você precisa capturar um único caractere?

Como diz o erro, o nome getch() está obsoleto (como que foi uma extensão específica do Microsoft), e _getch() é recomendado em vez. Eu não tenho certeza de onde POSIX vem nele; POSIX não definir getch(), mas em vez disso inclui getchar() como especificado pela ISO C padrão (página 298, projecto ligada à causa padrão final não é gratuito). A solução seria fazer como _getch() sugerido e usar, ou usar o getchar() C padrão.

Você pode usar "std :: getc (stdin);". Ele funciona como 'getch ();' em meus programas. Eu acho que é uma boa alternativa para 'getch ()' Se eu estiver errado, diga-me.

#include <cstdio>

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

Ele produz 'a' se você input 'a' no console.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top