Ir para o conteúdo
vrael

Ficheiro TXT carregar array

Mensagens Recomendadas

vrael    0
vrael

Boa tarde,

Tenho de fazer um exercicio e uma das partes consiste em receber valores de um txt (devidamente formatados)

Exemplo:

1500 50 10 5

800 70 5 7

Recebo um máximo de 60 valores inteiros e não há mínimo.

Dúvidas:

Como carrego os arrays com os valores do ficheiro txt? (Sendo os arrays multidimensionais r (i,j))

Como faço a condição de paragem (pensei em por um while !=0 mas há alguns valores que podem ser zero)?

Se eu quiser fazer uma opção que me permita alterar os valores do ficheiro txt como faço?

Tendo em conta que não dei a matéria e tenho de a apresentar

Obrigado espero ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

A maneira mais rapida (e mais "bruta") é recorrendo a funcao fscanf() com o conversor "%d".

Este conversor (fscanf(ficheiro, "%d", &numero)) ignora espacos e enters iniciais, depois converte o input num inteiro e devolve 1.

Se nao for possivel converter o input da erro devolvendo 0.

Se os dados tiverem chegado ao fim da erro devolvendo EOF.

Mete o scanf num ciclo e vai passando os valores para o(s) array(s).

Nao te esquecas de primeiro abrir o ficheiro nem de o fechar quando terminares (fopen() e fclose()).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael


#include <iostream>
FILE *fp;








int r[60][4],c[60][4],t[60][5];


main()
{

     fp = fopen("resist.txt", "r");
     int i=0;
     if (fp==NULL)
     {
                        printf("\n ERRO\n");
                        }
                        else
                            {
                            while((fscanf(fp,"%d %d %d %d",&r[i][0],&r[i][1],&r[i][2],&r[i][3]))!=EOF)
                            {
                                                 i++;
                                                        }

Já estou a conseguir carregar os ficheiros de um txt. Mas eu preciso de ler 3 ou 4 se volto a repetir o código dá-me imensos erros.

--'

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

<iostream> nao e um header valido para C

nao precisas de variaveis globais

a variavel i pode ser definida mais perto do local onde e usada: no else da validacao do fopen.

Com estas mudancas podes facilmente repetir o codigo as vezes que quiseres ... mas aconselho-te a fazeres uma funcao em vez de copy/paste.

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

int main(void)
{
    FILE *fp;
    int r[60][4], c[60][4], t[60][5];


    fp = fopen("resist.txt", "r");
    if (fp == NULL)
    {
        perror("resist.txt");
        // exit(EXIT_FAILURE);
    }
    else
    {
        int i = 0;
        while((fscanf(fp, "%d %d %d %d", &r[i][0], &r[i][1], &r[i][2], &r[i][3])) != EOF)
        {
            i++;
        }

Falta fechar umas chavetas tal e qual como no codigo que postaste

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael

Hmmm mas eu só posso carregar uma vez os arrays. E preciso de carregar vários ficheiros txt. Ou seja, o array tem de ser global.

Como faço para isso acontecer? :S

Tentei fazer assim mas só carrega a primeira lista


FILE *fp;


int r[60][4],c[60][4],t[60][5];


main()
{

     fp = fopen("resist.txt", "r");
     int i=0;
     if (fp==NULL)
     {
                        printf("\n ERRO\n");
                        }
                        else
                            {
                            while((fscanf(fp,"%d %d %d %d",&r[i][0],&r[i][1],&r[i][2],&r[i][3]))!=EOF)
                            {
                                                 i++;
                                                        }
                                                        
      fp = fopen("conden.txt","r");
      if (fp==NULL)
      {
          printf("\n ERRO\n");
          }
      else
      {
          while((fscanf(fp,"%d %d %d %d",&c[i][0],&c[i][1],&c[i][2],&c[i][3]))!=EOF)
          { 
                i++;
                }      
          }  

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Ora bem ... suponhamos que o "resist.txt" tem 10 grupos de valores. No fim do ciclo, a variavel i vai ter 10. Esse 10 vai ser usado para meter os valores no array c, donde os primeiros elementos (c[0], c[1], ..., c[9]) vao ficar a zero.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael

Já entendi tenho de voltar a declarar a variavel como 0 ou usar outra. Obrigado :confused:

Outra duvida que me surgiu agora caso os profs sejam matreiros

if(x[i][j]!=0)

Posso usar uma linha tipo esta dentro de um ciclo para fazer os prints do que eu tenho, mas o problema é que alguns valores podem ser zero. Como faço para usar o != mas só se forem todos os elementos da coluna :S

Obrigado mais uma vez

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Outra duvida que me surgiu agora caso os profs sejam matreiros

if(x[i][j]!=0)

Posso usar uma linha tipo esta dentro de um ciclo para fazer os prints do que eu tenho, mas o problema é que alguns valores podem ser zero. Como faço para usar o != mas só se forem todos os elementos da coluna :S

Nao sei se percebi bem ... mas podes usar o && (E) ou o || (OU) para "juntar" varias condicoes

// se forem todos diferentes de zero
if ((x[i][0] != 0) && (x[i][1] != 0) && (x[i][2] != 0) && (x[i][3] != 0)) /* ... */;

// se pelo menos um for diferente de zero
if ((x[i][0] != 0) || (x[i][1] != 0) || (x[i][2] != 0) || (x[i][3] != 0)) /* ... */;

// se pelo menos um for igual a zero
if ((x[i][0] == 0) || (x[i][1] == 0) || (x[i][2] == 0) || (x[i][3] == 0)) /* ... */;

// se forem todos iguais a zero
if ((x[i][0] == 0) && (x[i][1] == 0) && (x[i][2] == 0) && (x[i][3] == 0)) /* ... */;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade