Wczytanie danych z pliku do tablicy struktur

0
#include <stdio.h>
#include <iostream>
#include <string>
#include <time.h>
#include <fstream>
const	int n=4;
const int m=6;
//////////////
struct notebook
{
	char nazwa[20];
	float cena;
	};
////////////
using namespace std;

//////////////////////////////
void losuj(int tab[][m], int m);

void  otworz_do_zapisu (ofstream &plik, const char nazwa_pliku[]);

void zapisz_do_pliku(ofstream &plik , int tab [][m], int n,int y);
int szukanie_znaku(char tekst [], int *s);
int dlugosc(char tekst[]);
void otworz_do_odczytu ( ifstream &plik, const char nazwa_pliku[] );
void ilosc_wierszy (ifstream &plik, int &licznik);
void czy_pusty(ifstream &plik);
void wypisz(int tab[][m], int n);
void czytaj_z_pliku(ifstream &plik, notebook tab[]);
	void wyswietl(notebook tab[], int &ile);
		
/////////////////////////////
int main ()
{	int y;
	int M[n][m];
	ofstream plik_we;
	ifstream plik_wy;
	 char tekst [100];
	 int wskaznik;
	 int licznik=1;
	 char c;
	 
	 int x;
	 srand(time(0));
	///////////zad 1////////////
	
otworz_do_odczytu (plik_wy,"pl1.txt") ;

ilosc_wierszy (plik_wy,licznik);
cout<<"Wierszy w pliku jest : "<<licznik<<endl; //dla sprawdzenia ile jest wierszy
 
 //notebook *A = new notebook [licznik];
 notebook *A;
 A = new notebook [licznik];
czytaj_z_pliku(plik_wy,A);
//cout << "Zawartosc pliku:" << endl;
wyswietl(A,licznik);

plik_wy.clear();
plik_wy.close();

a to funkcje

 	void czytaj_z_pliku(ifstream &plik, notebook tab[])
	{	for (int i=0;i<3;i++)
		{
			plik.getline(tab[i].nazwa,20,' ');
			plik>>tab[i].cena;
			plik.get();
			
			
			}
}
		
		void wyswietl(notebook tab[], int &ile)
			{
				for(int i=0;i<ile;i++)
				cout<<tab[i].nazwa<<" " <<tab[i].cena<<endl;
				}
void ilosc_wierszy (ifstream &plik, int &licznik)
{char c;

while(plik.get(c))
{
	if(c == '\n')
	licznik++;
}
}

Mam probem.. bo jak wiem ile elementów jest w pliku to nie ma problemu, ale jak mam dynamicznie przydzieloną pamięc , ilość elementów w tablicy , to wychodzą śmieci...
Co robie nie tak?

0

Pare dni temu w jednym z tematów napisałem że programowanie bez formatowania kodu
to tak jak chodzenie ze spodniami spuszconymi do kostek, da się ale niezbyt łatwo no i niezbyt przezwoicie.
A jak ktoś uczy się dopiero chodzić i ma takie spuszczone spodnie to zakładam że nigdy się nie nauczy, bo się nie da.

unsigned czytaj_z_pliku(ifstream &plik,notebook tab[],unsigned ile)
  {
   for(unsigned i=0;i<ile;++i)
     {
      plik.getline(tab[i].nazwa,20,' ');
      plik>>tab[i].cena;
      if(!plik) return i; // tyle ile udało się wczytać wierszy może być mniej niż przekazana ilość
      plik>>ws; // potrzebny <iomanip>
     }
   return ile;
  }

unsigned ilosc_wierszy (ifstream &plik)
  {
   unsigned licznik=0;

   char c=0; 
   while(plik.get(c)) if(c=='\n') ++licznik;
   return licznik+(c!='\n'); // +1 jeżeli mamy wiersz nie zakończony enterem.
  }
0

a co robi to :

 plik>>ws; // potrzebny <iomanip> 

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