Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    81
    Innanzitutto mi sono accorto ora che hai messo un exit(1) se la fopen fallisce. Quindi dimentica quanto ho detto prima .... se fp è NULL, la fclose non viene eseguita.
    Avevo rivisto millemila volte l'if else e non capivo dove sbagliavo..infatti non sbagliavo

    Per quanto riguarda il secondo programma, se non vuoi chiedere in input il numero di elementi, puoi scegliere altre strade, come ho già detto anche prima. Cioè determinare quanti elementi ci sono tramite la lunghezza del file oppure leggere un float per volta.
    Se vuoi semplicemente stampare i valori uno dopo l'altro, basterebbe quest'ultima opzione.

    Volendo modificare il programma che scrive il file, potresti mettere in testa al file 4 byte (1 int) che indica quanti elementi ci sono.
    Che vuol dire mettere in testa al file 4 byte??
    Quello che voglio fare io è un prog tipo:
    codice:
    #include <stdio.h>
    ...
    main()
    
    fp = fopen("array.dat" , "rb")
    
    /* ed ora fare le operzioni (nel mio caso la media dei valori dell array).*/
    Senno che dovrei fare?? sinceramente non ho capito quello che mi stai dicendo (determinare gli elementi tramite lunghezza del file..ecc)

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da InferNOS
    Senno che dovrei fare?? sinceramente non ho capito quello che mi stai dicendo (determinare gli elementi tramite lunghezza del file..ecc)
    La questione è che il programma che scrive il file è in grado di scrivere un numero qualunque di elementi float, infatti chiede in input il numero.

    Dall'altra parte, nel programma che legge, dovrai pur determinare quanti elementi ci sono, no?? Se devi semplicemente fare una media dei valori, ti basta fare una lettura sequenziale, non necessariamente devi caricare tutti i dati in memoria!!

    Una cosa del tipo:

    codice:
    int ele = 0;
    float val, media = 0.0f;
    
    ... apertura ecc...
    
    while (fread (&val, sizeof (val), 1, fp) == 1)
    {
        media += val;
        ele++;
    }
    
    media /= ele;
    (non testato e chiaramente ele non deve essere 0 nella divisione)
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #13
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    81
    codice:
    int ele = 0;
    float val, media = 0.0f;
    
    ... apertura ecc...
    
    while (fread (&val, sizeof (val), 1, fp) == 1)
    {
        media += val;
        ele++;
    }
    
    media /= ele;
    umh...allora perchè "&"val? poi perchè non hai messo "ele" al posto di 1 nella fread??

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da InferNOS
    umh...allora perchè "&"val? poi perchè non hai messo "ele" al posto di 1 nella fread??
    Perché leggo 1 solo elemento per volta!!! Con &val passo l'indirizzo della variabile 'val', quindi un puntatore. Leggo quindi 1 elemento di lunghezza sizeof(val).

    Ripeto: o fai la lettura di 1 elemento per volta oppure carichi tutti gli elementi in memoria. In quest'ultimo caso devi conoscere quanti elementi ci sono, allocare memoria sufficiente e leggere tutti gli elementi.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #15
    Originariamente inviato da InferNOS
    umh...allora perchè "&"val?
    Perché altrimenti fread non potrebbe scrivere in val, visto che in C i parametri vengono passati per valore.
    poi perchè non hai messo "ele" al posto di 1 nella fread??
    Perché legge un elemento per volta.
    ---EDIT---
    Arrivo tardi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #16
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    81
    Grazie!!
    Sinceramente meglio la lettura di un elemento x volta senno reputo l esercizio inutile!
    Comunque nel while hai scritto
    codice:
    (fread (&val, sizeof (val), 1, fp) == 1)
    quel == 1 sta per fine dell'array giusto?

  7. #17
    Più o meno; la fread restituisce il numero di elementi letti, per cui se tale numero è diverso da 1 (il numero di elementi che le è stato detto di leggere) significa che il file è finito o che c'è un altro errore.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #18
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    81
    Thanks!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.