C Prosta baza danuch/Wczytywanie danych (rozne typy) z pliku i zapis ich do tablic

0

Witam, mam problem otóż mam za zadanie utworzyć prosta bazę danych z pliku ,który wygląda ona mniej więcej tak:

Saqxwpq    Acehchzvfrkmlno   10624
Kpq           Xrjxkitzyxacbhh      7962
Cqco         Ndtomfg                9863
Dwfc         Pxiqvkuytdl            9379
Dewhtacio  Ordtqkvwc           11366 

Mój pomysł jest taki aby utworzyć strukturę i odpowiednio do niej wpisywać chary i inty (gdyż później będę musiał ją sortować)
Cały problem polega na tym ze nie wiem jak wpisać wartości do odpowiednich tablic. Chciałbym aby pierwsza kolumna to było imię druga nazwisko a trzecia pensja. W podanych niżej programie nie wiem/nie potrafię dodać np całego wyrazu do jednego wiersza w tabeli. Moze macie dobre pomysły aby to zrobić? Oto poniżej mój kod:

#include<stdio.h>
#define N 1000000
int main()
{
    int znak;
    FILE *plik = fopen( "baza.txt", "r" );   // otwieramy plik do odczytu
 
     typedef struct  {;
   char imie;
   char nazwisko;
   int pensja;
 } Baza;
  Baza tab[N];
     int i =0;
    znak = getc( plik ); 
    while( znak != EOF )                  
    {
      if ((znak > 64 && znak< 91 )||(znak> 96 && znak< 123))
        tab[i].imie = (char)znak; // probowalem zrzutowac ina na chara ale to i tak nie wyjdzie bo ta zmienna bedzie pamietac ostatnia wartosc 'znaku'
      if(znak==32) i++; // jezeli spacja to nastepu wiersz ( to tez jest zle bo jak bedzie pare spacji to beda niepotrzebnie robione puste wiersze w tablicy
	printf( "%c", znak );             
        znak = getc( plik );
    } 
    fclose( plik );                       
    int max =i;
    for(i = 0; i < max; ++i)
	printf("%c\n",tab[i].imie);
        
    return 0;
} 

Pozdrawiam

0

Problem jest w tym, ze pola imie i nazwisko powinny byc wskaznikiem na typ char a nie typu char.

char* imie;
char* nazwisko;

Poza tym definicje struktury wyrzuc przed main i poczytaj o fscanf, bo czytanie znak po znaku mija sie z celem.

0

No i fprintf, bo glownie chodzi Tobie o zapisywanie do pliku.

0

dzięki za rade zrobiłem to funkcja fscnf(), lecz teraz mam problem z zrobieniem do mojego programu struktury. Będę wdzięczny jeśli ktoś poprawi moje rozwiązanie oraz powie jak się od wołać do takiej struktury lub da linka z podobnym przykładem. .

ogólnie myślałem nad czymś takim:

 typedef struct  {;
   char imie;  // Tu powinna byc zrobiona tablica mniej wiecej taka char imie[N][14] ale  nie wiem jak to powiazac z struktura
   char nazwisko;
   int pensja;
 } Baza;
  Baza tab[N]; 

Oto moj kod:

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 18
int main() 
{
   
int i;
char imie[N][14] ;
char nazwisko[N][14];
int liczby[N];
      FILE *plik;
      if((plik=fopen("baza.txt", "r"))==NULL){
	printf("Nie moge otorzyc pliku!\n"); exit(1); 
      } 

for(i=0;i<N;i++){
  //scanf("%s",napisy[i]);
if(i%3==0)
fscanf(plik, "%s", &imie[i]);
else if(i%3==1)
fscanf(plik, "%s", &nazwisko[i]);
else if(i%3==2)
fscanf(plik, "%d", &liczby[i]);
 // strcpy(napisy[i], "raz")
}

for(i=0;i<N;i++){
if(i%3==0) //printf("\n");   
 printf("%15s ", imie[i]);
if(i%3==1) //printf("\n");   
 printf("%15s ", nazwisko[i]);
if(i%3==2) //printf("\n");   
 { printf("%11d ", liczby[i]); printf("\n"); }

}
 return 0;
}
1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Dane{
	char imie[32];
	char nazwisko[32];
	int liczby;
} Baza;

int main() 
{
	int i;
	FILE *plik;
	Baza *baza = NULL;


      	if((plik=fopen("baza.txt", "r"))==NULL) {
		printf("Nie moge otorzyc pliku!\n");
		exit(1); 
	} 
 
	//przeliczenie ile linii ma plik
	int c, len;
	while((c = fgetc(plik)) != EOF) {
		if(c=='\n') {
			len++;
		}
	}

	//przydzielenie pamieci dla bazy
	baza = (Baza *)malloc(len*sizeof(Baza));

	//cofniecie wskaznika pliku
	rewind(plik);

	//odczytanie danych
	for(i=0; i<len; i++) {
		fscanf(plik, "%s", &baza[i].imie);
		fscanf(plik, "%s", &baza[i].nazwisko);
		fscanf(plik, "%d", &baza[i].liczby);
	}
	
	//wypisanie danych
	for(i=0; i<len; i++) {
		printf("%d : %s %s %d\n", i, baza[i].imie, baza[i].nazwisko, baza[i].liczby);
	}
	
	return 0;
} 
0

Dzięki Wielkie, już sobie poradziłem z problemem ale twoje rozwiązanie jest jak najbardziej w porządku :) +

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