Uložení dat do dyn. alokovaného pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Uložení dat do dyn. alokovaného pole – C / C++ – Fórum – Programujte.comUložení dat do dyn. alokovaného pole – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
aralxd0
Duch
3. 5. 2014   #1
-
0
-

Zdravím,

ve škole jsme dostali závěrečný projekt v jazyce C, s kterým si nevím moc rady už od samého začátku.

Zde je zadání prvního úkolu, s kterým bych potřeboval pomoc, konkrétně s uložení dat do dynamicky alokovaného pole:

Vypracujte program pro práci s evidencí studentů uloženou v 
tomto textovém souboru. Předem není znám počet studentů (záznamů, pouze bude zachovaný formát). Využijte v programu dynamické pole studentů s pomocí realoc. Pomocí dynamického pole načtěte záznamy o studentech ze souboru.

Soubor s daty vypadá takto:

Karel
Smid
85 ( znaci zisk bodu daneho studenta )
Jirka
Holub
90
....atd

Tady je zatím mé řešení, které jsem dokázal splácat:

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

int main()
{
    /** DYNAMICK ALOKOVANE POLE */
    int indexStudenta = 1;

    char ** pole;
    char pomocna[255];
    int index = 0;

    /** VICEROZMERNE POLE STUDENTU A JEJICH UDAJU */
    pole = (int **) malloc(indexStudenta*sizeof(int *));
    pole[0] = (char *)malloc(10*sizeof(char)); // Jmeno
    pole[1] = (char *)malloc(10*sizeof(char)); // Prijmeni
    pole[2] = (char *)malloc(10*sizeof(char)); // Znamka

    /** OTEVRENI SOUBORU */
    FILE *soubor;
    soubor = fopen("seznam.txt","r");

    if(soubor == NULL) {
        printf("Soubor nebyl nalezen.");
        return 0;
    }

    /** CTENI SOUBORU */
    while ((fscanf(soubor, "%[^\n]", pomocna)) != EOF) {
       fgetc(soubor);
       if(index==0) { pole[indexStudenta][0] = pomocna; index++; }
       if(index==1) { pole[indexStudenta][1] = pomocna; index++; }
       if(index==2) {
            pole[indexStudenta][2] = pomocna;
            index = 0;
            indexStudenta++;
            pole = (int **) realloc(pole, indexStudenta*sizeof(int *));
       }
       printf("%s \n", pole[indexStudenta][index]);
    }

    free(pole);
    fclose(soubor);
    return 0;
}

Bohužel nějak jsem se nejspíše zamotal právě v té dynamické alokaci a program padá. Mohl by mi prosím někdo poradit, jak nejlépe tyto data ukládat do dynamického pole, aby všechno fungovalo ?

Děkuji.

Nahlásit jako SPAM
IP: 85.207.94.–
Reklama
Reklama
z
~ Anonymní uživatel
268 příspěvků
3. 5. 2014   #2
-
0
-

Hned na začátku alokuješ paměť o velosti jednoho ukazatele na int a pak do ní vkládáš tři ukazatele na char. A když má pole velikost N, tak jsou platné indexy od 0 do N-1.

Vykašli se na vícerozměrné pole. Udělej si strukturu s údaji o studentovi a použij jednorozměrné pole těchto struktur (nebo ukazatelů na ně).

Až se zasekneš, tak se klidně zase zeptej.

Nahlásit jako SPAM
IP: 88.101.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 138 hostů

Podobná vlákna

Uložení dat — založil crAzY^

Uložení dat programu. — založil Luckaa

Uložení dat do souboru — založil Atheo

Uložení dat do souboru — založil neOph

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý