Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no switch case

switch(direcao) {

        case 'a';
        
            mapa[x][y-1] = '@';
            
            break;
            
        case 'w';
            mapa[x-1][y] = '@';
            break;
        case 's';
            mapa[x+1][y] = '@';
            break;
        case 'd';
            mapa[x][y+1] = '@';
            break;
    }

minha primeira vez usando switch case não sei onde que eu errei, quando compilo ele dá erro em todas as linhas de case, quando troco os pontos e virgulas por ':' ele compila porém quando dou o primeiro comando: "W || A || S || D" ele não para de imprimir o mapa.

1 resposta
solução!

Oii, Gabriel!

Primeiro, você está correto ao substituir os pontos e vírgulas (;) por dois pontos (:). Isso é necessário porque a sintaxe correta do switch case em C requer dois pontos após cada caso. Como no exemplo abaixo:

switch(direcao) {
    case 'a':
        mapa[x][y-1] = '@';
        break;
    case 'w':
        mapa[x-1][y] = '@';
        break;
    case 's':
        mapa[x+1][y] = '@';
        break;
    case 'd':
        mapa[x][y+1] = '@';
        break;
}

Segundo, você mencionou que o mapa não para de ser impresso após o primeiro comando. Isso pode estar acontecendo porque você não está limpando a posição anterior do herói no mapa. Para resolver isso, você precisa adicionar uma linha de código que limpa a posição anterior do herói após o switch case. Seu código deve ficar assim:

switch(direcao) {
    case 'a':
        mapa[x][y-1] = '@';
        break;
    case 'w':
        mapa[x-1][y] = '@';
        break;
    case 's':
        mapa[x+1][y] = '@';
        break;
    case 'd':
        mapa[x][y+1] = '@';
        break;
}
mapa[x][y] = '.'; // Limpa a posição anterior do herói

Espero ter ajudado e bons estudos!