Jump to content

Ficheiro TXT carregar array


Recommended Posts

Posted

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

Posted

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()).

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

#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.

--'

Posted

<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

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

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++;
                }      
          }  
Posted

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.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

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

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

Posted

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)) /* ... */;

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.