Pergunta

Eu estou tentando a função abaixo para obter um nome de arquivo ao mesmo tempo, permitir a tecla " ESC " pressione para voltar

mas, por algum motivo, _getch() sempre retorna [1 '\x1'] e o que está sendo impresso é um smiley face, mesmo de Retrocesso (o que é bom e tudo, mas absolutamente não o que eu quero que aconteça).

  • O que está acontecendo aqui?

Outras idéias sobre como melhorar o código são mais do que bem-vindo!(Eu recentemente terminei o meu primeiro ano na faculdade, então eu ainda sou muito novo para programação)

string& Get_Filename()
{
    char ch;
    string name;

    while (ch = _getch() != 'CR')
    {
        if (ch == 'ESC')
            throw RESTART;
        if (ch == 'BS')
        {
            name.pop_back();
            cout << 'BS';   // Also, will this correctly delete or will I need to
        }                   // << '\b' << ' ' << '\b'?
        else
        {
            name += ch;
            cout << ch;
        }
    }
    return name;
}
Foi útil?

Solução

Leia sobre a precedência de operador aqui: http://en.cppreference.com/w/cpp/language/operator_precedence

Um dos problemas está na linha

while (ch = _getch() != 'CR')

desde != tem maior precedência que o operador de atribuição

o que você está realmente perguntando é:

while( ch = (_getch() != 'CR') )

e, assim, obter o resultado da expressão em vez de o personagem que você queria (que é o integral de conversão bool->char definidos na norma do §4.7/4 0 ou 1)

Além disso:você está retornando uma referência a uma variável local.Certifique-se de retornar um valor cópia ou algo que não se enquadram fora do escopo.

Finalmente: _getch() devolve o caractere lido do console, você não pode "interceptar" chave especial acordes (e.g.Ctrl-D ou Esc).Leia mais aqui: http://msdn.microsoft.com/it-it/library/078sfkak.aspx

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