Nacitanie spajaneho linearneho zoznamu zo subora (C)

Programovacie jazyky, rady, poradňa...
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Nacitanie spajaneho linearneho zoznamu zo subora (C)

Príspevok od používateľa guitarista25 »

Cawte maniaci.
Nevedel by mi niekto poradit kde by mohla byt chyba ?
Skusal som to ale vypisuje to dost velke halusky.

Kód: Vybrať všetko

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


	typedef struct struktura { /* definovanie struktury */
		char nazov_knihy[100];
		char autor[100];
		char vydavatelstvo[50];
		int rok;
		double cena;
		int pocet_kusov;
		char popis[200];
		struct struktura *dalsi;
	} STRUKTURA;
	
int main()
{

    
	int i, n,c;
    STRUKTURA *p_prv, *p_akt;
	FILE *fr ; 
	n = 0;
	if (p_prv == NULL) {
    printf("Spajany zoznam uz raz bol vytvoreny.\n");
    return 1;
  }

	if ((fr = fopen("SUBOR.TXT", "r")) == NULL){
		printf("Subor sa nenasiel\n");
		getchar();
		return 1;
	}
  /* nacita a ulozi prvy zaznam */
  if((p_prv = (STRUKTURA *) malloc(sizeof(STRUKTURA))) == NULL){
        printf("Malo pamate.\n");
        return 1;
    }
  	while (feof(fr) == 0){
            if ((fgetc(fr)) == '*')
				n++;
	}
	
				rewind(fr);
				fgetc(fr);					
				fgets(p_prv->nazov_knihy, 100, fr);
				fgets(p_prv->autor, 100, fr);
				fgets(p_prv->vydavatelstvo, 100, fr);
				fscanf(fr, "%d", &p_prv->rok);
				fscanf(fr, "%lf", &p_prv->cena);
				fscanf(fr, "%d", &p_prv->pocet_kusov);
				fgets(p_prv->popis, 200, fr);

				
		  p_akt = p_prv;

  /* nacita a ulozi ostatne zaznamy */
  while (feof(fr) == 0){
	p_akt->dalsi = (STRUKTURA *) malloc(sizeof(STRUKTURA));
	p_akt = p_akt->dalsi;
				fgetc(fr);
				fgets(p_prv->nazov_knihy, 100, fr);
				fgets(p_prv->autor, 100, fr);
				fgets(p_prv->vydavatelstvo, 100, fr);
				fscanf(fr, "%d", &p_prv->rok);
				fscanf(fr, "%lf", &p_prv->cena);
				fscanf(fr, "%d", &p_prv->pocet_kusov);
				fgets(p_prv->popis, 200, fr);

				
  }
  p_akt->dalsi = NULL;

	printf("pocet zaznamov je %d\n",n);
	printf("Nazov knihy: %s\n", p_akt->nazov_knihy);
    printf("Autor: %s\n", p_akt->autor);
    printf("Vydavatelstvo: %s\n", p_akt->vydavatelstvo);
    printf("Rok: %d\n", p_akt->rok);
    printf("Cena: %lf\n", p_akt->cena);
    printf("Pocet kusov: %d\n", p_akt->pocet_kusov);
    printf("Popis: %s\n", p_akt->popis);
    printf("\n");

	
	return 0;
}
dikes vopred :wink:
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

co ti vypisuje?
a v tom subore (subor.txt) to mas dobre zapisane?
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Príspevok od používateľa guitarista25 »

no v podstate iba nejake ciary a extremne cisla :shock:
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Príspevok od používateľa guitarista25 »

ludiaaa ... pomozte prosim ... fakt to nikto nevie ? :( :(
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Príspevok od používateľa guitarista25 »

ano je to dobre zapisane, priklad:

Kód: Vybrať všetko

*
Ucebnice jazyka C
Pavel Herout
Nakladatelstvi KOPP
1994
287.00
11
ucebnica
*
Zakliata hora
Pavol Dobsinsky
Tatran
1980
250.50
7
stara rozpravkova kniha
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

sak tam nevidim ziadnu funkciu ktora by citala udaje po riadkoch.musis pocitat aj s odriadkovanim chr(13)+chr(10)
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Príspevok od používateľa guitarista25 »

Mozes mi to upresnit ? alebo doplnit to do mojho zdrojaku aby to fungovalo ?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

namiesto fgets a fscanf používaj getline. V tej časti kde čítaš zo súboru:

Kód: Vybrať všetko

.
.
.
/* nacita a ulozi prvy zaznam */
  if((p_prv = (STRUKTURA *) malloc(sizeof(STRUKTURA))) == NULL){
        printf("Malo pamate.\n");
        return 1;
    }
     while (feof(fr) == 0){
            if ((fgetc(fr)) == '*')
            n++;
   }
   
            rewind(fr);
            fgetc(fr);               
            fgets(p_prv->nazov_knihy, 100, fr);
            fgets(p_prv->autor, 100, fr);
            fgets(p_prv->vydavatelstvo, 100, fr);
            fscanf(fr, "%d", &p_prv->rok);
            fscanf(fr, "%lf", &p_prv->cena);
            fscanf(fr, "%d", &p_prv->pocet_kusov);
            fgets(p_prv->popis, 200, fr);

            
        p_akt = p_prv;

  /* nacita a ulozi ostatne zaznamy */
  while (feof(fr) == 0){
   p_akt->dalsi = (STRUKTURA *) malloc(sizeof(STRUKTURA));
   p_akt = p_akt->dalsi;
            fgetc(fr);
            fgets(p_prv->nazov_knihy, 100, fr);
            fgets(p_prv->autor, 100, fr);
            fgets(p_prv->vydavatelstvo, 100, fr);
            fscanf(fr, "%d", &p_prv->rok);
            fscanf(fr, "%lf", &p_prv->cena);
            fscanf(fr, "%d", &p_prv->pocet_kusov);
            fgets(p_prv->popis, 200, fr);

            
  } 
.
.
.
insane
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 244
Registrovaný: 07 jún 2005, 20:29
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa insane »

mensia OT: Ty si prvak na FIITke, ze?! :)) Taketo sme mali aj my robit pred 2 rokmi... Ak ti to fakt nepojde tak sa ozvi, poslem ti nejake "vzorove" riesenia
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Príspevok od používateľa guitarista25 »

Jasne som, a bol by som velmi rad keby si mi nieco poslal. Prave sa ucim na opravak a nevyzera to velmi ruzovo :roll:
Napísať odpoveď