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

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);
    }
}

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