Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C - funkcia fscanf ignoruje po cykle nacitanie zo suboru

Dobry den prajem. Robim jednu funkciu v ktorej mam vyhladat isty riadok v subore dajme tomu kazdy 4ty a z neho zobrat hodnotu do premennej typu int. To som vyriesil cez funkciu fscanf. Problem je v tom ze prvy krat mi hodnotu nacita spravne dajme tomu ze v jednotlivych riadkoch su dane hodnoty 4: 1, 8: 0, 12: 1, (v stvrtom riadku je hodnota 1 v osmom 0 atd.) nacita hodnotu 1 a este vykona dajake prikazy co su teraz nepodstatne no ako ide o dalsie 4 riadky na 8. riadok nezoberie hodnotu 0 ale v premennej ostane furt hodnota 1. Kontroloval som program a tie riadky sedia presne to znamena on na tom riadku s hodnotou 0 vazne je ale fscanf akoby neprebehlo. Neviete preco sa to deje? Co moze byt pricina toho ze v cykle vynechava fscanf? daco z bufferom, ci?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Prepacte ze som neodpovedal skorej nemohol som tu je moj kod funkcie void naplneniePola(FILE *fr,do…
Parker 04.11.2015 20:28
Parker
Scanf medzi tymi forami nacita hodnotu do pola ale uz dalsie nie
Parker 04.11.2015 20:29
Parker
Dakujem vsetko slape uz tomu chapem :) poslední
Parker 04.11.2015 20:49
Parker
pole je pointer na pointer, ne pointer na to pole ! pole je adresa ddalsieho pointra (ulozene v sta…
MM.. 04.11.2015 20:41
MM..
resp. oprava, musis urobit adresu toho dalsieho prvku, alebo proste len posunut pointer o i, t.j. bu…
MM.. 04.11.2015 20:45
MM..
Dakujem to bolo k tej predchadzajucej odpovedi :) nový
Parker 04.11.2015 20:48
Parker
Hodi mi to warning warning: format ‘%lf’ expects argument of type ‘double *’, but argument 3 has ty…
Parker 04.11.2015 20:46
Parker
Ano viz moju reakciu nad tymto :) nový
MM.. 04.11.2015 20:48
MM..

Prepacte ze som neodpovedal skorej nemohol som tu je moj kod funkcie

void naplneniePola(FILE *fr,double **pole)
{
    char retazec[50];
    int pocetRiadkov=0;
    int i;
    int j;

    if(*pole!=NULL)free(*pole);
    rewind(fr);
    while((fgets(retazec,50,fr))!=NULL) //program priradi retazcu cely riadok v subore a kontroluje po riadkoch dokial nenarazi na koniec suboru
    {
        if(*retazec=='\n')++pocetRiadkov;   //program zistuje ci sa retazec rovna iba znaku '\n' cize je prazdny ak ano povysi pocet riadkov
    }
    *pole=(double *)malloc((pocetRiadkov+1)*sizeof(double));
    rewind(fr);
    for(i=0;i<pocetRiadkov+1;++i) //program priradi retazcu cely riadok v subore a kontroluje po riadkoch dokial nenarazi na koniec suboru
    {
        for(j=0;j<3;++j)fgets(retazec,50,fr);
        fscanf(fr,"%lf",(pole)[i]);
        for(j=0;j<4;++j)fgets(retazec,50,fr);
    }
}

pole je pointer na pointer, ne pointer na to pole !

pole je adresa ddalsieho pointra (ulozene v stacku). Ked napisem pole[0] tak odkazujem na ten pointer. pole[1] ukazuje uplne doprdele (ukazoval by na dalsi pointer, ne na pole!)

ked chces adresovat prvky pola, tak skus
fscanf(fr,"%lf",(*pole)[i]);

Zpět do poradny Odpovědět na původní otázku Nahoru