Ir para conteúdo
Fórum Script Brasil
  • 0

Ler uma matriz tipo char em um arquivo .txt em C++


Rizzen

Pergunta

Olá, estou programando em c++, e preciso ler uma matriz q estará em um arquivo de texto, a matriz é tipo esta:

00000000000000000002

00000000000000000000

00000000000000000000

00000003333330000000

00000003333330000000

00000003333330000000

00000003333330000000

00000000000000000000

00000000000000000000

10000000000000000000

Estou lendo ela como um vetor de char, mas meu programa está com problema na leitura, pois quando uso a função eof no while pra ele ler enquanto não for o fim do arquivo, o programa lê 2 vezes a matriz e usando a função get(), também está dando problema, alguém sabe como me ajudar?

O programa por enquanto é esse:

#include <iostream>

#include <conio.h>

#include <fstream>

using namespace std;

int main (){

char mapa[10][20];

int i, j;

ifstream fin;

fin.open("mapa.txt");

while (fin.get(mapa[10][20])){

for (i=0; i<10; i++){

for (j=0; j<20; j++){

fin >> mapa[j];

cout << mapa[j];

}

cout << endl;

}

}

fin.close();

getch();

}

Editado por Rizzen
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Consegui. Ufaaa.

O que você precisava fazer era testar a condição do .eof antes do loop para que ele pudesse achar o final do arquivo. OBS: O meu "myfile" é a mesmo coisa que o seu "fin".

#include <iostream>
    #include <conio.h>
    #include <fstream>
    #include <windows.h>
    #include <string>

    using namespace std;

    int main ()
    {
            char mapa[20][10];
            int i, j;
            ifstream myfile("mapa.txt");
            if (!myfile)
            {
                    cout << "Arquivo não foi aberto" << "\n"<< endl;
                    system("pause");
                    return -1;
            }
            //sempre teste para ver se o arquivo abriu.
            myfile >> mapa[0][0];
            while (!myfile.eof())
            {
          for (i = 0; i < 20; i++)
          {
              for (j = 0; j < 10; j++)
              {
          myfile >> mapa[i][j];
            cout << mapa[i][j];
            }
          }
            }
            myfile.close();
            return 0;
            }

Boa sorte.

Editado por PedroCunha
Link para o comentário
Compartilhar em outros sites

  • 0

Valeu aí cara, mas eu já tinha conseguido, só agora que lembrei de postar aqui. O meu ficou desse jeito:

#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

int main (){
    char mapa[10][20];
    int i, j;
    ifstream fin; 
    fin.open("mapa.txt");
    while (! fin.eof()){
          for (i=0; i<10; i++){
              for (j=0; j<20; j++){
                  fin >> mapa[i][j];
                  cout << mapa[i][j];
              }
              fin.ignore();
              cout << endl;
          }
    }
    fin.close();
    getch();
}

Coloquei a função ignore e agora não repete a leitura da matriz com a função eof.

Editado por Rizzen
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...