zczytywanie tablicy dwuwymiarowej z pliku

0

Co tu jest źle? Nie wyświetla poprawnie tablicy z pliku tab.txt
Pomoże ktoś, plis

#include<iostream>
#include<fstream>
using namespace std;
void wczytaj(char *nazwa)
{
ifstream odczyt(nazwa,ios::in);
char *tab[5];

  for(int i=0;i<5;i++)
    {
       tab[i] = new char[6];
       odczyt>>tab[i];
    }
  for(int i=0;i<5;i++)
    {
    for(int j=0;j<6;j++)
      {
            cout<<tab[i][j];
      }
    cout<<"\n";
    }
      

}
int main()
{
wczytaj("tab.txt");
getchar();
}

Plik tab.txt wygląda tak:

3 4 5 7 9 6
4 6 5 3 4 6
2 7 6 4 3 1
3 4 5 3 4 3
3 4 5 3 4 5

0

Nie wyświetla poprawnie tablicy z pliku tab.txt

Program nic nie wyświetla, oprócz błędów kompilacji.
Deklarujesz tablicę

char tab[5];

a następnie przy jej pomocy próbujesz utworzyć dynamiczną tablicę

tab[i] = new char[6];

Nie prościej będzie zdefiniować tablicę w taki sposób?

char tab[5][6];
0

Teraz działa, dzięki

ifstream odczyt("tab.txt");

for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
int tab[i][j];
odczyt>>tab[i][j];
cout<<tab[i][j]<<" ";
}
cout<<"\n";
}

0

Na 100% nie działa. bo tablicę masz lokalną

0

Dragon weź już nie rób kolejnego mętliku. Działa na 100% i już, omamów wzrokowych jeszcze nie mam. Tablice to ja z pliku wczytuje, a ta lokalna, czy nie to tylko, żeby w nią wpisać tą z pliku.

0

Czasem lepiej coś przemilczeć...Dzięki za pomoc, ale chaos wprowadzasz

1

Chaos? Ja?
Twój, niby działający program to dopiero chaos!
Mazanie po pamięci.
Bezsensowne tablice wewnątrz pięli.
Tworzenie tablicy tylko po to aby coś zapisać poza ta tablicą w nadzieje że to się nie wypieprzy i za chwila da się stamtąd cos odczytać.

0

to może ty coś napisz, zapodaj jakiś kod , jeśli tak obeznany jesteś

1

I w czym ci to pomoże?

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;

int main(int n,char *p[])
{
	ifstream fin;
	if(n>1)
	{
		fin.open(p[1]);
		cin.rdbuf(fin.rdbuf());
	}
	vector<vector<int>> tb(5,vector<int>(6));
	istream_iterator<int> sin(cin);
	for(vector<int> &row:tb) for(int &val:row) val=*(sin++);
	ostream_iterator<int> sout(cout," ");
	for(const vector<int> &row:tb)
	{
		for(const int &val:row) *(sout++)=val;
		cout<<endl;
	}
	return 0;
}

https://ideone.com/brflDR

3
MyszkaMiki napisał(a):

Dragon weź już nie rób kolejnego mętliku. Działa na 100% i już, omamów wzrokowych jeszcze nie mam. Tablice to ja z pliku wczytuje, a ta lokalna, czy nie to tylko, żeby w nią wpisać tą z pliku.

Piszesz metodą stochastyczną.
Program jest napisany d/d, a że w danej chwili błędy nie wyłażą, to nie znaczy, ze ich nie ma.

Twoje zadowolenie z siebie jest w odwrotnej proporcji do realiów.

1
using Vector = std::vector<int>;
using Matrix = std::vector<Vector>;

Vector loadVector(std::istream& in)
{
     Vector r;
     r.reserve(256);
     std::copy(std::istream_iterator<Vector::value_type>{in}, {}, std::back_inserter(r));
     return r;
}

Matrix loadMatrix(std::istream& in)
{
    std::string strLine;
    Matrix r;
    while (std::getline(in, strLine)) {
        std::istringstream line{strLine};
        r.push_back(loadVector(line));
    }
    return r;
}

Matrix loadMatrix(const std::filesystem::path& path) // C++17
{
    std::ifstream f{path};
    return loadMatrix(f);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1