Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] erro na impressão do mapa

aqui esta o codigo

#include <stdio.h>
#include <stdlib.h>

int main(){

    char mapa[7][15+1];

    FILE* fmap;
    fmap = fopen("ffmap.txt", "r");
    
    if(fmap == 0){

        printf("mapas não encontrados");
        exit(1);
    }

    for(int i = 0; i < 7; i++){

        fscanf(fmap, "%s", mapa[i]);
    }
    for(int i = 0; i < 7; i++){

        printf("%s\n", mapa[i]);
    }

    fclose(fmap);
}

aqui esta o mapa do jogo (eu fiz um pouco diferente e maior que o da aula)

|-------------|
|.............|
|...------....|
|.....|.@|....|
|...--|.....--|
|.............|
|-------------|

o problema é que no vscode ele aparece símbolos aleatórios:

G─╝☺ ☺á▬a◄¸⌂

ð‼G─╝☺ ☺


SƒV☻ ☺ á▬§╠÷⌂

ð‼SƒV☻ ☺

já no linux o codigo funciona normalmente

3 respostas

Olá, Kelvyn! Tudo bem?

O problema que você está enfrentando pode estar relacionado com a codificação do arquivo que você está lendo. O VSCode e o Linux podem estar usando codificações de caracteres diferentes, o que pode causar a diferença na saída do seu programa. O VSCode, por padrão, usa a codificação UTF-8, enquanto o Linux pode estar usando outra codificação.

Uma solução possível seria verificar e, se necessário, alterar a codificação do arquivo ffmap.txt para UTF-8 no VSCode. Você pode fazer isso clicando na parte inferior direita da janela do VSCode, onde provavelmente está escrito "UTF-8". Isso abrirá um menu suspenso onde você pode selecionar a codificação correta.

Além disso, vale a pena mencionar que o fscanf com %s vai ler até encontrar um espaço em branco (espaço, tabulação, nova linha, etc). No seu mapa, você tem pontos e traços que são separados por espaços, então o fscanf pode não estar lendo a linha inteira como você espera. Uma alternativa seria usar fgets ao invés de fscanf, que lê a linha inteira, incluindo os espaços:

for(int i = 0; i < 7; i++){
    fgets(mapa[i], 15+1, fmap);
}

Espero que essas sugestões possam te ajudar a resolver o problema. Lembre-se, a codificação do arquivo e a forma como você lê o arquivo são partes importantes para garantir que o mapa seja lido corretamente. Espero ter ajudado e bons estudos!

oi, oque voce me disse sobre verificar o codificador e usar o fgets em vez do fscanf não funcionou, mas de qual quer forma muito obrigado por tentar me ajudar, mas eu acho que vou fazer esse curso de C só no linux, já que estou mais interessado em C++ e C#, vou tentar resolver o problema mas se eu não conseguir só vou fazer no linux mesmo, novamente muito obrigado por tentar me ajudar.

solução!

acabei de descobrir que o problema era que o arquivo txt não estava no mesmo diretório do código, eu tinha copiado o txt do mapa para o diretório e por algum motivo ele enviou um arquivo sem nada mas com o mesmo nome, então eu achei que o arquivo estava no diretório do código, mas só tinha um arquivo txt sem nada