Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se
Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Matriz retorna número da memória II

Tentei fazer um código em que ele próprio escreva os números de 0 a 199 no arquivo txt para que eu não faça isso manualmente. O arquivo txt é escrito automático, de forma a formar uma matriz 20x10. Entretanto, a impressão desses números no terminal não ocorre. Acredito que deva conter algum erro neste trecho, pois se eu deleto este trecho tudo volta a funcionar (estando o txt já preenchido com os números). Coloquei no código os comentários referentes a cada trecho.

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

int main(int argc, char const *argv[])
{
    int numeros[20][10];  //10 colunas + 1?
    int num = 0;

      FILE* f;
    f = fopen("numeros.txt", "r+"); 
    if (f == 0){
        printf("Desculpe, banco de dados inexistente!\n\n");
        exit(1); 
    }

    printf("Escrevendo no documento . . .\n\n");

    //escreve matriz em txt para eu não ter que digitar manualmente (se deletar estas 7 linhas o código funciona):
    for (int linha = 0; linha < 20; linha++){                      //1
        for (int coluna = 0; coluna < 10; coluna++){     //2
            fprintf(f, "%d ", num);                                                 //3
            num++;                                                                            //4
        }                                                                                           //5
        fprintf(f, "%s", "\n");                                              //6
    }                                                                                    //7


    //lê cada linha do arquivo txt, guarda na matriz e imprime o número no terminal:
    for(int i = 0; i < 20; i ++){
        for(int j = 0; j < 10; j ++){
            fscanf(f," %3d", &numeros[i][j]);
            printf("%d ", numeros[i][j]);
        }
        printf("\n");
    }
   fclose(f); 

   return 0;
}

A saída impressa errada é:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Olá,

É que na verdade se fosse para usar o fscanf para ler o seu arquivo ele teria que ser alguma coisa assim:

Esse código não compila, é só para mostra como teria que fazer para poder usar o fscanf.

int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, ....;
fscanf(f," %d%d%d%d%d%d%d%d%d%d.....", &n0, &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9.....); 
printf("%d-%d-%d-%d-%d-%d-%d-%d-%d-%d.....", n0, n1, n2, n3, n4, n5, n6, n7, n8, n9...);

Isso tudo fora do um for.

Eu imagino que o que vc queria fazer é algo assim:

    FILE *fp;
    char c;
    int n = 0;
    if ((fp=fopen ("numeros.txt","r")) != NULL) {
        while( (c=fgetc(fp)) !=EOF) {
            printf("%c", c);
        }
    }
    fclose(fp);

Atte

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software