3
respostas

Erro no printf (C III)

Ok, eu comecei o módulo de C III e me deu um pequeno problema, que acredito que possa estar relacionado ao Windows.

Eu copiei exatamente o mesmo código do vídeo, mas ao compilar o código, deu algum erro, pois o resultado que me deu não foi o mesmo do mapa, com alguns caracteres estranhos no começo:

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

Process returned 0 (0x0)   execution time : 0.146 s
Press any key to continue.

O meu código é o seguinte, caso haja algo que fiz diferente e nem reparei:

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

int main()
{
    int i;
    char mapa[5][10+1];
    FILE *f;

    f = fopen("mapa.txt", "r");
    if (f == 0)
    {
        printf("Erro na leitura do mapa\n");
        exit(1);
    }

    for (i = 0; i < 5; i++)
    {
        fscanf(f, "%s", mapa[i]);
    }
    for (i = 0; i < 5; i++)
    {
        printf("%s\n", mapa[i]);
    }

    fclose(f);
}

e o meu mapa do arquivo .txt:

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

Eu suspeito que se trate de algo do Windows por conta da tabela ascii ou algo assim, mas não tenho certeza, pensei que poderia ser algo relacionado ao arquivo .txt em si, mas como o erro não aconteceu no vídeo, estou meio sem saber.

Desde já, muito obrigado.

3 respostas

Olá Lucas! Provavelmente ao escrever ou copiar o código você sem querer adicionou algum caractere invisível no começo do arquivo.

Tente o seguinte: crie um novo arquivo e digite cada caractere do mapa, um a um, sem utilizar as ferramentas de copiar e colar. Depois tente rodar o seu programa utilizando esse novo arquivo e nos mostre o resultado!

É que na verdade eu não copiei, eu que escrevi mesmo hahaha Por isso fiquei bem confuso com isso, mas eu criei o arquivo no bloco de notas, não no Sublime text, não sei se poderia afetar algo, apesar de pensar que não porque no jogo da forca eu também usei o bloco de notas.

Entendi, Lucas. Então vamos ver o que pode estar errado.

Pergunta 1: por que o tamanho do seu vetor é [5][10+1] ao invés de [5][10]? Reparei que cada linha do seu mapa tem exatos 10 caracteres então o mapa não precisaria dessa casa extra.

Pergunta 2: por que você acha que no mapa impresso pelo programa, o segundo (ou terceiro) pipe | e subsequente \n foram completamente ignorados? Alguma chance de ter algum caractere estranho ali? Tente apagar e reescrever esse trecho.

Pergutna 3: o que acontece se você imprimir, no loop do mapa, caracteres envolvendo o mapa? printf("XX%sXX\n", mapa[i]);

Quem sabe alguma dessas perguntas te ajuda a descobrir o problema. Não hesite em voltar aqui!