Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Attenti a Poco F7: può essere il best buy del 2025. Recensione
Attenti a Poco F7: può essere il best buy del 2025. Recensione
Poco F7 5G, smartphone che punta molto sulle prestazioni grazie al processore Snapdragon 8s Gen 4 e a un display AMOLED da ben 6,83 pollici. La casa cinese mantiene la tradizione della serie F offrendo specifiche tecniche di alto livello a un prezzo competitivo, con una batteria generosissima da 6500 mAh e ricarica rapida a 90W che possono fare la differenza per gli utenti più esigenti.
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-05-2008, 16:58   #1
stgww
Senior Member
 
L'Avatar di stgww
 
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
[C]Problemi con feof()

Ciao a tutti. Ho fatto questi tre programmi per esercitarmi con i file. Tutto funziona fino a che nei vari for metto il numero di cicli pari ad un numero, ma quando lo cambio con feof, allora cominciano i problemi, il primo record mi si sballa
Ecco i programmi:
1)Carico il file
Codice:
#include <stdlib.h>
#include <stdio.h>

struct rec
       {
       char titolo[30], autore[30];
       float durata;
       };

int main()
{
    struct rec cd;
    int i;
    
    FILE*list;
    list=fopen("dati.bin", "w");
    
    for(i=0;i<3;i++)
    {
                    printf("Titolo?\n");
                    scanf("%s", cd.titolo);
                    printf("Autore?\n");
                    scanf("%s", cd.autore);
                    printf("Durata (in minuti)?\n");
                    scanf("%f", &cd.durata);
                    fwrite(&cd,sizeof(struct rec),1,list);
                    system("CLS");
    }                
    fclose(list);
        
    system("PAUSE");
    return 0;
}
2)Lo visualizzo e fino qui nessun problema
Codice:
#include <stdlib.h>
#include <stdio.h>

struct rec
       {
       char titolo[30], autore[30];
       float durata;
       };

int main()
{
    struct rec cd;
    int i;
    FILE*list;
    list=fopen("dati.bin", "r");
    for(i=0;i=!feof(list);i++)
    {
                    fread(&cd,sizeof(struct rec),1,list);
                    printf("Titolo %s \n", cd.titolo);
                    printf("Autore %s \n", cd.autore);
                    printf("Durata:%f \n", cd.durata);
        
    }                
    fclose(list);
    
    system("PAUSE");
    return 0;
}
3)Provo ad elaborarlo un po'
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct rec
       {
       char titolo[30], autore[30];
       float durata;
       };
       
int show_user(struct rec cd,FILE*list)
{
    char titolo[30];
    int i;
    
    list=fopen("dati.bin", "r");
    printf("Titolo dell'album che vuoi cercare?\n");
    scanf("%s", titolo);
    for(i=0;i=!feof(list);i++)
    {
                    fread(&cd,sizeof(struct rec),1,list);
    
    if((strcmp(titolo,cd.titolo))==0)
                    {
                                                      
                                                      printf("Titolo %s \n", cd.titolo);
                                                      printf("Autore %s \n", cd.autore);
                                                      printf("Durata:%f \n", cd.durata);
                    }
     } 
     fclose(list);                                                
    
    
    return 0;
}    

int edit_user(struct rec cd,FILE*list)
{
    char titolo[30];
    int i,n;
    list=fopen("dati.bin", "r+");
    printf("Titolo dell'album che vuoi modificare?\n");
    scanf("%s", titolo);
    for(i=0;i=!feof(list);i++)
    {
                    fread(&cd,sizeof(struct rec),1,list);
                    if(strcmp(titolo,cd.titolo)==0)
                    n=i;
    }
    fseek(list,n,0);
                    printf("Titolo?\n");
                    scanf("%s", cd.titolo);
                    printf("Autore?\n");
                    scanf("%s", cd.autore);
                    printf("Durata (in minuti)?\n");
                    scanf("%f", &cd.durata);
                    fwrite(&cd,sizeof(struct rec),1,list);
    return 0;
}
                
int add(struct rec cd,FILE*list)
{
    list=fopen("dati.bin", "a"); 
    printf("Titolo?\n");
    scanf("%s", cd.titolo);
    printf("Autore?\n");
    scanf("%s", cd.autore);
    printf("Durata (in minuti)?\n");
    scanf("%f", &cd.durata);
    fwrite(&cd,sizeof(struct rec),1,list);
    fclose(list);
    return 0;

}      
int main()
  {
    struct rec cd;
    int i,function1;
    
    FILE*list; 
    show_user(cd,list);
    edit_user(cd,list);
    add(cd,list);
            
    system("PAUSE");
    return 0;
  }
Ecco provate a farli girare un secondo per capire cosa intendo. Poi un ultima cosa: come avete visto nell'ultima funzione aggiungo un record all'archivio, ma se a quel punto faccio ripartire il primo programma per caricare mi chiede solo tre recor e poi mi me ne mostra copiando il 3 nel 4, c'è modo di sviare l'inghippo?
Tha a lot
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca"
stgww è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 18:58   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da stgww Guarda i messaggi
Codice:
    for(i=0;i=!feof(list);i++)
Togli i= dalla condizione, lascia solo !feof(list).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 19:07   #3
stgww
Senior Member
 
L'Avatar di stgww
 
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Togli i= dalla condizione, lascia solo !feof(list).
Ok, grazie! Ora il primo problema l'ho risolto. Per quella storia che se per esempio: ho un record di 3, con la funzione add ne aggiungo uno, poi torno in carica e carico i tre record, ma il terzo appena immesso mi viene copiato nel 4, sai qualcosa ? Thx
EDIT: ho provato a cancellare il file bin contenente l'archivio e caricando i record con il primo programma (quindi 3 in totatle) mi appaiono ancora 4 record e il terzo mi viene copiato nel 4. Come mai?
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca"

Ultima modifica di stgww : 15-05-2008 alle 19:10.
stgww è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 20:21   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Non ho letto attentamente perché vado di fretta, ma secondo me il comportamento di edit_user() non è corretto: appena trovi il record giusto direi che puoi interrompere la lettura, quindi n diventa superflua e puoi dare un break invece di memorizzare l'indice e leggere fino alla fine. Inoltre, fseek() non è usata bene, avresti dovuto dare un:
Codice:
fseek(list, n*sizeof(struct rec), SEEK_SET);
(dove n può essere sostituita direttamente con i se usi un break come ti ho consigliato)

Prova, magari risolve.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 20:36   #5
stgww
Senior Member
 
L'Avatar di stgww
 
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Non ho letto attentamente perché vado di fretta, ma secondo me il comportamento di edit_user() non è corretto: appena trovi il record giusto direi che puoi interrompere la lettura, quindi n diventa superflua e puoi dare un break invece di memorizzare l'indice e leggere fino alla fine. Inoltre, fseek() non è usata bene, avresti dovuto dare un:
Codice:
fseek(list, n*sizeof(struct rec), SEEK_SET);
(dove n può essere sostituita direttamente con i se usi un break come ti ho consigliato)

Prova, magari risolve.
Grazie per l'ottimizzazione! Purtroppo non risolve il problema deve essere altrove...Cmq se non ha i tempo fa niente, magari se puoi me lo riguardi con calma domani.
Thx
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca"
stgww è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2008, 18:20   #6
stgww
Senior Member
 
L'Avatar di stgww
 
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
Up per me !
Nessuno riesce a risolvere?
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca"
stgww è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2008, 19:14   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Scusa ma la struct rec cd viene passata per copia alle funzioni che chiami dalla main()? Dovresti passare un puntatore, altrimenti come la modificano? Prova a stamparne i valori nella main() dopo averli letti, per verificare.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Attenti a Poco F7: può essere il best buy del 2025. Recensione Attenti a Poco F7: può essere il best buy...
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
TSMC produrrà a 2 nm anche in Ari...
Tesla vuole Musk a tutti i costi: propos...
Spotify aumenta i prezzi: da 10,99 a 11,...
Prezzi folli su AliExpress con Choice Da...
IA ed etica: Fastweb+Vodafone fra le pri...
Pannelli solari nuovi o riciclati? Quest...
Instagram cambia le regole per i Live: n...
Windows 11 SE addio: Microsoft stabilisc...
Kali Linux più facile su macOS gr...
È la fine per le antenne 5G? Al l...
WhatsApp, una taglia da 1 milione di dol...
Sembrava spacciato, poi una bici elettri...
Apple Watch Series 1 diventa obsoleto: a...
ho. Mobile, upgrade a 250 GB senza sovra...
Reddit non avrà post a pagamento,...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v