[ nick2 @ 27.05.2011. 11:10 ] @
pozz, ovako imam jedan problem, postoji datoteka sa parametrima : IME PREZIME i posle toga negraniceno brojeva recimo IME PREZIME 1 2 4 6 4 7 9 , ja to treba da ucitam u listu i da nadjem iz ovih brojeva aritmeticku sredinu (ne moraju svi brojevi u listu, moze odma aritmeticka) ,,, e sad to ne bi bio problem da ovih brojeva imam fiksno,, recimo samo 3 onda bi citao:
while (!feof (ulaz))
{
fscanf (ulaz, "%s %s %d %d %d",ime,prezime, broj1,broj2,broj3);
dodavanje (lst,struktura);

}

ali to nije slucaj,, znaci kako da te brojeve "izbrojim" i najlakse nadjem aritmeticku sredinu...
[ karas @ 27.05.2011. 16:22 ] @
Neka petlja koja ucitava jedan po jedan broj?
Code:

int suma = 0, n = 0;
while (!feof (ulaz))
{
  int broj;
  fscanf (ulaz, "%d", &broj);
  suma += broj;
  ++n;
}

float sredina = suma / n;
[ nick2 @ 27.05.2011. 23:57 ] @
hvala na brzom odgovoru ,pomoglo je :)
[ nick2 @ 28.05.2011. 13:31 ] @
evo ovako , pojavio se problem, ova petlja ne prikazuje da je ocitala bilo kakve brojeve,mozda zato sto se ispred tih brojeva nalaze 3 stringa (3 reci) ?
mozda bi cak bilo bolje resenje da ucitam sve te brojeve u listu pa da odande nalazim aritmeticku sredinu, medjutim ni to nikako ne uspevam, tacno mi prave problem ti brojevi kojih ima prozivoljno, i nikako se ne ocitavaju svi,,,

da li postoji neka funkcija koja gleda kraj reda, to jest '\n' pa da recimo kazem da mi ocitava brojeve samo iz tog reda,,, (u sledecem redu su mi vec drugo ime i prezime i njegovi brojevi, ako krene da mi cita sve brojeve na svim redovima odjedanput ne znaci mi nista)
[ X Files @ 29.05.2011. 18:06 ] @
Citat:
da li postoji neka funkcija koja gleda kraj reda,

Sa fgets() mozes da citas liniju po liniju fajla.
Sa strtok() mozes da odvajas stringove iz reda koga si upravo procitao.

Otprilike ovako:

Code (c):

/* Standardne C biblioteke, koje obicno trebaju svakom programu */
#include <stdio.h>
#include <stdlib.h>

/* Naziv fajla (ako ga ne ukucavas) i MAX ocekivana duzina linije */
#define NAZIV_DATOTEKE "file.txt"
#define MAX_OCEKIVANA_DUZINA_LINIJE 200

/* Glavna funkcija */
int main(void)
{
    /* Rezervisemo prostor za ceo jedan red, onoliko koliko smo pretpostavili da ce biti maksimalno velik */
    char BufferZaCeoRed[MAX_OCEKIVANA_DUZINA_LINIJE];

    /* Ovo je pokazivac koji ce koristiti funkcija strtok() kada bude izdvajala stringove jednog reda */
    /* Iskreno, prvi put u zivotu sada koristim strtok(), pa me cudi da se ovo ne alocira, al' ajd' na poverenje ... verovatno znaju sta rade */
    char *PokazivacNaElementStringa;

    /* Otvaranje fajla, ovo skapiraj sam... */
    FILE *PokazivacNaFajl;
    PokazivacNaFajl = fopen( NAZIV_DATOTEKE, "r" );
    if ( PokazivacNaFajl == NULL )
    {
        printf( "Datoteka %s se ne moze otvoriti!\n", NAZIV_DATOTEKE );
        return EXIT_FAILURE;
    }


    /* fgets() cita red po red fajla */
    while ( fgets( BufferZaCeoRed, MAX_OCEKIVANA_DUZINA_LINIJE, PokazivacNaFajl ) )
    {
        printf( "\nRED:%s", BufferZaCeoRed );
        printf( "ELEMENTI REDA:\n" );

        /* strtok() izdvaja stringove iz procitanog reda, a kao separator smo definsali BLANKO */
        PokazivacNaElementStringa = strtok ( BufferZaCeoRed, " " );
        while ( PokazivacNaElementStringa != NULL )
        {
            printf ( "%s\n", PokazivacNaElementStringa );

            /*
                OVDE SMISLI NACIN DA U PRVA DVA PROLAZA ODVOJIS IME i PREZIME,
                A U SLEDECIM PROLAZIMA DA POKUPIS VREDNOSTI, KOJE PRETHODNO
                TREBA DA PRETVORIS U float ILI integer JER SU SADA STRINGOVI

                RECIMO, UVEDI BROJAC, PA AKO JE NULA, ONDA JE TO IME, AKO JE JEDAN
                ONDA JE PREZIME, AKO JE VECI OD JEDAN, ONDA SABIRAJ ... ITD
            */


            PokazivacNaElementStringa = strtok ( NULL, " " );
        }
    }
    fclose( PokazivacNaFajl );
    return EXIT_SUCCESS;
}
 


Nadam se da je sada jasnije.



[Ovu poruku je menjao X Files dana 29.05.2011. u 21:04 GMT+1]
[ nick2 @ 06.07.2011. 18:37 ] @
izvinjavam se na zakasnjenu, hvala puno , pomoglo je :)