[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.10.12
Prihlásený: 21.10.15
Príspevky: 18
Témy: 5 | 5
NapísalOffline : 10.11.2013 10:36 | Dynamicky alokovane 2D pole C

Dobrý deň, mám taky dosť veľký problém, potrebujem načítavať zo súboru stringy nahrávať ich do pola jedine čo viem že pole bude mať staticky zadefinované stĺpce ale neviem kolko riadkov. V súbore sú usporiadané štvorice, a každý riadok zo štvorice musí byť v inom poli, pričom platí že prvé riadky sú v prvom poli a tak ďalej mohol by mi niekto pomôcť, alebo aspoň nájsť chybu v mojom programe? Vopred všetkým ďakujem
Kód:
#include <stdio.h>
#include <stdlib.h>
#define N 51

void nacitV(char ***meno, char ***ulica, double **dan, int **datum)
{
    int j=0;
    FILE *file1;
    if ((file1 = fopen("subor.txt", "r"))==NULL)
        printf("Nepodarilo sa otvorit subor");
    else
    {
        while (!feof(file1))
        {
            (*meno) = ((char **)realloc((*meno), (j+1)*sizeof(char*)));
            (*ulica) = ((char **)realloc((*ulica), (j+1)*sizeof(char*)));
                (*meno)[j] = ((char*)realloc((*meno)[j],N*sizeof(char)));
                (*ulica)[j] = ((char*)realloc((*ulica)[j],N*sizeof(char)));
           
            fgets((*meno)[j], N, file1);
            fgets((*ulica)[j], N, file1);
           
           
           
            (*dan) =(double *) realloc((*dan), (j+1)*sizeof(double));
            fscanf(file1, "%lf",dan[j]);
           
            (*datum) =(int *) realloc((*datum), (j+1)*sizeof(int));
            fscanf(file1, "%d",datum[j]);
           
            fgetc(file1);
            fgetc(file1);
           
            printf("MENO :%s",(*meno)[j]);
            printf("ULICA:%s",(*ulica)[j]);
            printf("DAN: %.2lf\n",*dan[j]);
            printf("DATUM: %d\n\n", *datum[j]);
            j++;
        }
    }
}



int main(int argc, const char * argv[])
{
    char **meno=NULL,**ulica=NULL;
    double *dan=NULL;
    int *datum=NULL;
    nacitV(&meno,&ulica,&dan,&datum);
   
    return 0;
}

Upravené 11.11


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 11.11.2013 10:03 | Dynamicky alokovane 2D pole C

Snaž sa vždy zbaviť čo najviac hviezdičiek, pretože tie robia v programe iba bordel a robia ho veľmi neprehľadným. Ľahko tak vieš niečo prehliadnuť. Vždy sa snaž písať programy čo najprehľadnejšie, nech sa v tom vieš dobre vyznať nie len ty, ale aj hocikto iný, kto na to pozrie.
Ďalej, keď používaš viacrozmerné polia, musíš si poriadne rozmyslieť, ktorý pointer ukazuje kam a čo to znamená.
Takto nejako by to malo robiť to, čo chceš
Kód:
void nacitV(char ***p_meno, char ***p_ulica, double **p_dan, int **p_datum)
{
    // pozri ako si zjednodusim pracu v celej funkcii
    char **meno = *p_meno;
    char **ulica = *p_ulica;
    double *dan = *p_dan;
    int *datum = *p_datum;

    int j = 0;
    FILE *file1 = fopen( "file.txt", "r" );

    if( file1 == NULL )
    {
        printf("Nepodarilo sa otvorit subor");
        return;
    }
    // ziadny else nie je potrebny

    while ( !feof(file1) )
    {
        // rozsirim kazde pole o jedna
        meno  = (char **) realloc( meno,  (j+1)*sizeof(char*) );
        ulica = (char **) realloc( ulica, (j+1)*sizeof(char*) );

        dan   = (double *) realloc( dan,   (j+1)*sizeof(double) );
        datum = (int *)    realloc( datum, (j+1)*sizeof(int)    );

        // alokujem si pamat pre novy string
        meno[j] = (char*) malloc( N*sizeof(char) );
        ulica[j] = (char*) malloc( N*sizeof(char) );

        // citam subor a pri kazdej chybe skoncim (mozem trebars aj ohlasit chybu)
        if( fgets(meno[j], N, file1) == NULL )
            return;

        if( fgets(ulica[j], N, file1) == NULL )
            return;

        if( fscanf(file1, "%lf\n", &dan[j]) != 1 )
            return;

        if( fscanf(file1, "%d\n", &datum[j]) != 1 )
            return;


        printf( "MENO : %s", meno[j] );
        printf( "ULICA: %s", ulica[j] );
        printf( "DAN: %lf\n", dan[j] );
        printf( "DATUM: %d\n\n", datum[j] );
        j++;
    }
}


Ak chceš tieto polia ale ďalej v programe (mimo funkcie nacitV) používať, musíš si niekde vrátiť aj počet načítaných záznamov - tj. dĺžku každého pola.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.10.12
Prihlásený: 21.10.15
Príspevky: 18
Témy: 5 | 5
Napísal autor témyOffline : 11.11.2013 13:32 | Dynamicky alokovane 2D pole C

Veľmi pekne ti ďakujem, za dobrú radu.


 [ Príspevkov: 3 ] 


Dynamicky alokovane 2D pole C



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicky mikrofon

v Ostatné

0

466

17.08.2011 16:09

ultimateman

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamický disk

v Pevné disky a radiče

4

1800

26.03.2010 9:29

jan037

V tomto fóre nie sú ďalšie neprečítané témy.

dynamický obsah

v JavaScript, VBScript, Ajax

2

684

01.06.2009 9:50

pilná lama glama

V tomto fóre nie sú ďalšie neprečítané témy.

Include dynamický

v PHP, ASP

3

579

31.01.2012 1:23

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

PHP dynamický title

v PHP, ASP

10

626

25.11.2012 19:00

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

dynamicky disk - vista

v Pevné disky a radiče

9

1190

23.04.2009 19:59

AsuSmaNiaK

V tomto fóre nie sú ďalšie neprečítané témy.

Základný a dynamický disk

v Operačné systémy Microsoft

2

3419

18.04.2015 15:22

Alastor

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicky vs. Typicky kontrast

v Monitory, televízory a projektory

8

657

23.02.2014 15:00

muranec3

V tomto fóre nie sú ďalšie neprečítané témy.

JAVA: dynamicky pridavane checkboxy

v Assembler, C, C++, Pascal, Java

4

406

27.04.2011 14:47

bimbo34

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicky Link na obrazok

v HTML, XHTML, XML, CSS

1

406

23.01.2011 21:32

emer

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicky disk - Windows 7

v Operačné systémy Microsoft

6

557

25.05.2015 15:24

hanesovic

V tomto fóre nie sú ďalšie neprečítané témy.

LCD TV dynamicky kontrast

v Monitory, televízory a projektory

0

754

19.11.2010 16:07

kllr007

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamický disk (chcem konvertovať)

v Pevné disky a radiče

6

3250

09.08.2010 14:30

DildoGripak

V tomto fóre nie sú ďalšie neprečítané témy.

mysql - dynamický počet fieldov

v Databázy

3

583

07.11.2009 18:46

rooobertek

V tomto fóre nie sú ďalšie neprečítané témy.

Schéma: Predzosilovač pre dynamický mikrofón

v Elektronika

0

5252

23.01.2007 4:58

Elektronic

V tomto fóre nie sú ďalšie neprečítané témy.

[VYRIESENE] priradenie premennej do pola (dynamicky)

v PHP, ASP

5

503

11.03.2009 17:04

stenley



© 2005 - 2025 PCforum, edited by JanoF