File di testo seq. - stampare URL con la valutazione maggiore

di il
1 risposte

File di testo seq. - stampare URL con la valutazione maggiore

Buongiorno! Il programma mi chiede:
/*Sia dato un file di testo valutazione.txt contenente le valutazioni di siti web. Le informazioni sono così strutturate: ogni rigo contiene un URL seguito
da un numero di '*' (rappresentanti la media dei voti, da 1 a 5) seguiti da un intero (rappresentante il numero di voti). Scrivere una procedura che restituisca
l'URL con la valutazione migliore e, a parità di valutazione, quello con più voti.
es:
http://www.polimi.it **** 109<eol>
http://www.studenti.it **** 150<eol>
http://www.lombardia.it ** 93<eol>
http://www.google.com *** 64<eol>
http://www.victoria.org **** 118<eol><eof>
output: http://www.studenti.it Voto medio: 4, votanti: 150 */
Il Codice che ho elaborato è il seguente:
#include <stdio.h>

void procedura( FILE*, char[20], char[5], int );

int main ()
{
    FILE *cfPtr;
    char URL[20], valutazione[5];
    int numero_voti;

    if( (cfPtr = fopen("valutazione.txt", "r")) == NULL )
        printf("errore");

    while( !feof(cfPtr) ){
        procedura(cfPtr, URL, valutazione, numero_voti);
    }

    fclose(cfPtr);
    return 0;
}

void procedura( FILE *cfPtr, char URL[20], char valutazione[5], int numero_voti )
{
    int i, count = 5, hold = 5;

    fscanf(cfPtr, "%s %s %d", URL, valutazione, &numero_voti);
    //printf("(URL:)%s (Valutazione:)%s (Numero voti:)%d\n", URL, valutazione, numero_voti);

    for( i = 4; i >= 0; i-- ){
        if( valutazione[i] != '*' ){
            count--;
            if( hold > count ){
                hold = count;
                printf("%s Voto medio: %d, votanti: %d\n", URL, hold, numero_voti);
            }
        }
    }
}
Ora, se compio debugging per vedere se mi calcola bene le corrispondenti stelline in numeri (es. ** = 2 ***** = 5 ecc) mi funziona correttamente, ma non riesco a stampare la URL la cui valutazione è maggiore delle altre e - in caso di parità - quello con maggiore numero di voti (studenti.it). Come posso fare?

1 Risposte

  • Re: File di testo seq. - stampare URL con la valutazione maggiore

    La logica di funzionamento non è il massimo.
    non so il livello cui ti trovi, comunque...
    ... la funzione cui passi l'handle del file è illogica, passi le stringhe, non l'handle
    riguardo all'individuazione del voto, data la struttura, il parsing diciamo così "vagamente" serio è
    ... leggi una riga
    ... fai un ciclo inverso, dalla fine verso l'inizio, decrementando il contatore fino a quanto hai un carattere numerico. se il primo numero non-numerico è uno spazio procedi, fai un altro ciclo per contare le "*". cerca uno spazio.
    a quel punto prendi il voto facendo un ciclo dall'indice che hai memorizzato verso la fine, e convertendo poi in numero intero

    ovviamente se siete ancora nella fase iniziale vai di fscanf
    http://www.google.com *** 64<eol>
    per il resto... mantieni il massimo trovato finora (di votazione), e poi controlla per ogni riga se la votazione è migliore. se lo è, aggiorna il massimo.
    alla fine del ciclo avrai il tuo risultato
Devi accedere o registrarti per scrivere nel forum
1 risposte