Pregunta

Estoy tratando de que la función de abajo para obtener un nombre de archivo, permitiendo 'ESC' pulse para volver

pero por alguna razón _getch() siempre devuelve [1 '\x1'] y lo que se imprime es un la cara sonriente, incluso para el Retroceso (que es lindo y todo, pero absolutamente no es lo que queremos que suceda).

  • ¿Qué está pasando aquí?

Otras ideas sobre cómo mejorar el código son más que bienvenidos!(Recientemente he terminado mi primer año en la universidad, así que todavía soy bastante nuevo en la programación)

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;
}
¿Fue útil?

Solución

Leer acerca de la precedencia de operadores aquí: http://en.cppreference.com/w/cpp/language/operator_precedence

Uno de los problemas está en la línea

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

desde != tiene una mayor precedencia que el operador de asignación

lo que en realidad estamos preguntando es:

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

y así obtener el resultado de la expresión en lugar de el personaje que quería (que es el integral de conversión bool->char definidos en la norma §4.7/4 como 0 o 1)

Además:usted está devolviendo una referencia a una variable local.Asegúrese de devolver un valor de copia o algo que no se caiga fuera de alcance.

Finalmente: _getch() devuelve el carácter leído desde la consola, no se puede "interceptar" especial combinaciones de teclas (por ejemplo,Ctrl-D o Esc).Leer más aquí: http://msdn.microsoft.com/it-it/library/078sfkak.aspx

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