Quis deixar o scaneamento do comando dentro da função anda() desse jeito:
void anda(){
    int x, y;
    for(int i = 0; i < linhas; i++){
        for (int j = 0; j < colunas; j++){
            if (mapa[i][j] = '@'){
                x = j;
                y = i;
                break;
            }
        }
    }
    char comando;
    scanf(" %c", &comando);
    switch (comando){
        case 'a':
        mapa[y][x - 1] = '@';
        break;    
        case 'w':
        mapa[y - 1][x] = '@';
        break;
        case 's':        
        mapa[y + 1][x] = '@';
        break;
        case 'd':
        mapa [y][x + 1] ='@';
        break;
    }
    mapa[y][x] = '.';
}
int main(){
    le_mapa();
    do {
        imprime_mapa();
        anda();
    } while (!fimdejogo());
    limpa_mapa();
    return 1;
}
mas meu código fica com vários pacman's, um aparece na posição certa e outro fica onde o outro em luagres aleatórios, quando aperto aparece a mensagem "Falha de segmentação (imagem do núcleo gravada)". Alguém pode me ajudar? (tentei tirar o scanf do anda() e colocar o main, mas continuou com o mesmo problema).