Ir ao conteúdo
  • Cadastre-se
EduardoABarbosa

C++ ler arquivo com c++

Recommended Posts

Olá a todos, estou estudando c++ faz pouco tempo e estou tentando criar um algoritmo para ler um arquivo .txt para me ajudar na disciplina de laboratório de física para não ficar digitando sempre os dados.

Mas estou encontrando um problema, invés de ler a matriz 3x3, esta lendo 3x2 e também com os dados fora de ordem do arquivo txt,

O arquivo txt fiz no bloco de nota e o exemplo que estou testando.

3 2 3
1 2 5
7 8 9

Aqui o código:

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

int main()
{
 int l,c;
 //declaração da matriz
 int matriz[3][3];
 ifstream txtFile;
 txtFile.open ("matriz.txt",ios::in);
 txtFile >> l >> c;

 for(int i=0;i<l;i++)
        {
    for (int j=0;j<c;j++){
        txtFile >> matriz[j];
    }
 }

 cout << "a matriz lida do arquivo tem tamanho" << l << " x " << c << endl;
 cout << "conteudo da matriz do arquivo:" << endl;
for(int i=0;i<l;i++)
    {
    for (int j=0;j<c;j++){
        cout << matriz[j];
    }
    cout << endl;
 }
    cout <<"l"<< l << endl;
    cout <<"c"<< c << endl;
    return 0;

}

Quem puder me ajudar.

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@EduardoABarbosa Olá. Se fosse para resolver esse exercício em C p mim ficaria mais simples. Logo, baseado na pouca prática q tenho com o C++, arriscaria passar esse código o resolver o problema:

#include <iostream>
#include <fstream>
using namespace std;

#define LIN 3
#define COL 3

int main()
{
    //declaração da matriz
    int matriz[LIN][COL];
    ifstream txtFile;

    txtFile.open ("matriz.txt", ios::in);

    cout << "a matriz lida do arquivo tem tamanho " << LIN << " x " << COL << endl;

    cout << "conteudo da matriz do arquivo:" << endl;

    cout << endl;

    for(int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++) {
            txtFile >> matriz[i][j];
            cout << matriz[i][j] << " ";
        }
        cout << endl;
    }

    cout << endl;

    cout << "l " << LIN << endl;
    cout << "c " << COL << endl;

    txtFile.close();

    return 0;

}

Vê se seria isso. Só não posso afirmar q essa seria a melhor resposta p dar, ok?

Editado por giu_d
Correção no código
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, tudo bem!

 

O algoritmo aparente está certo, o layout do arquivo é que não.

 

O programa de @giu_d funciona para o arquivo.txt porque o seu algoritmo está alinhado com o arquivo.

Mais o programa apresentado por @EduardoABarbosa aparenta não está, a princípio poderíamos colocar erro no arquivo, ou seja, nem sempre há matrizes 3x3. Porque dessa conclusão? Por conta desta linha:

 

7 horas atrás, EduardoABarbosa disse:

txtFile >> l >> c;

Em que o programa somente ler a matriz depois que tem o número de linhas e colunas da matriz (l x c).

Então a estrutura (layout) no arquivo é que está errada. Pois o certo é assim:

 

matriz.txt

3 3
3 2 3
1 2 5
7 8 9

2 2
1 2
3 4

Entendeu a relação arquivo --> programa? Primeiro vem dois valores (linhas x colunas), depois vem os dados da matriz.

 

O.k!?

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado aos @giu_d e @AnsiC por terem me ajudado :D.

@giu_d Percebi a diferença no código que você fez e do meu, no que diz respeito a leitura das variáveis,foi importante para ver uma outra forma do algoritmo para o mesmo propósito. Agradeço novamente.

@AnsiC O ponto que você destaco sobre a relação do arquivo utilizado e a leitura no algoritmo, fiz a mudança sugerida no layout do arquivo, testei e compreendi o que diz dizer, falta de prática faz isso mas vou melhorando. Agradeço novamente.

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×