Skocz do zawartości
mar_cin!

c/c++ struktury i pliki

Rekomendowane odpowiedzi

Jak odczytać losową strukturę z pliku?

 

tzn. mam zadeklarowaną strukture

 

struct nazwa{

int liczba; // numer struktury

char znak;

char tablica[20] ;

}

struct nazwa baza[50];

 

i chce odczytać jedną taką strukturę z pliku tekstowego

Jeśli odczytuje wszystkie struktury naraz jest ok, ale ja chce odczytać tylko jedną

taką i to w dodatku losową, np. strukturę o numerze liczba (int z tego pliku)

 

Czy możecie podać mi taki fragment kodu? Bardzo prosze!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

taki programik napisalem kiedys na laborke z informy, funkcja odczyt robi chyba to o co pytasz. Dostosuj to sobie do swoich potrzeb. W tym programie jest juz zdefinowana baza zeby mozna bylo zobaczyc efekty dzialania. Jesli chcesz sprawdzic jak dziala to skompiluj, odpal zapisz baze do pliki a potem sobie wczytaj. (jakbys potrzenowal to mam to samo jeszce zrobione na operatorach pobrania ">>" )

#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>#include <iostream.h>#include<fstream.h>#include <conio.h>const int n=20;struct salon {       char marka[20]; 	 int rok; 	 long cena;         long pojemnosc;         };salon tab[]=  { {"Fiat",2000,21000,2000},    {  "WV",1999,24100,3200},    {  "Opel",1994,12000,1400},    {  "Fiat",1989,900,600},    {  "Toyota",2000,98300,95600},    {  "Opel",2003,45000,1600},    {   "WV",1990,13400,1200},    {   "Ford",1996,32900,2200},    {   "VV",2001,67700,2000},    {   "Ford",2003,67000,2000},    {"Fiat",2001,23000,1100},    {  "WV",1995,21100,1200},    {  "Opel",1998,18000,1300},    {  "Fiat",1985,300,1500},    {  "Toyota",1990,7300,4000},    {  "Opel",2001,30000,1400},    {   "WV",1999,19400,1500},    {   "Ford",1993,12900,3000},    {   "VV",1981,1700,1500},    {   "Ford",1997,27000,4000}    };void wczytaj(salon t[], int N){  for (int i=0; i<N; i++) {printf("npodaj marke :");gets(t[i].marka);  printf("podaj rok :");cin>>t[i].rok;  printf("podaj cene :");cin>>t[i].cena;    printf("podaj pojemnosc :");cin>>t[i].pojemnosc;    printf("n");    }}void pisz(salon t[], int N){  printf("n%20s","marka");  printf("%7s", "rok"); printf("%8s","cena");printf("%10s","  pojemnoscn");   printf("              --------------------------------n");  for (int i=0; i<N; i++) {printf("%20s",t[i].marka);  printf("%8i", t[i].rok); printf("%8ld", t[i].cena);  printf("%8ld", t[i].pojemnosc);  printf("n");         }}void zapis(salon t[],int n){  char *nz;  printf("nPodaj nazwe pliku :");gets(nz);  fstream s;  s.open(nz,ios::out | ios::binary);  for(int i=0;i<n;i++) { s.write((char*)(t+i),sizeof(salon));}  s.close();}int odczyt(salon t[],int n){  fstream k;  char *nw;  printf("nPodaj nazwe pliku :");gets(nw);  int z=0;  k.open(nw,ios::in);  for(int i=0;i<n;i++){  k.seekp(sizeof(salon)*i,ios::beg);  k.read((char*)(t+i), sizeof(salon)); }  if (k.good()) z=1;  k.close();  return z;}void zapistxt(salon t[],int n ){  fstream b;  char *nz;  printf("nPodaj nazwe pliku :");gets(nz);  b.open(nz,ios::app);  for(int i=0;i<n;i++) { b<<t[i].marka<<"t"<<t[i].rok<<"t"<<t[i].cena<<"t"<<t[i].pojemnosc<<"n";}  b.close();}void main(void){clrscr();char menu;char but;printf("n1 - zapis do pliku:");printf("n2 - odczyt z pliku:");menu=getch();switch(menu){case '1':{	printf("nChcesz zapisac tablice tekstowo(t/n):");	but=getch();	switch(but)	{case 't':zapistxt(tab,n);break;	case 'n':break;	}	printf("nChcesz zapisac tablice binarnie(t/n):");	but=getch();	switch(but)	{case 't':zapis(tab,n);break;	case 'n':break;	}break;}case '2':	{	odczyt(tab,n);	printf("Chcesz zobaczyc tablice (t/n):");	menu=getch();	switch(menu)  {case 't':pisz(tab,n);break;  case 'n':break;  }	}break;}getche();}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...