Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
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


Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Alchimia? No, scienza: ecco come produrr...
Il CISPE chiede di annullare l'acquisizi...
La Now Bar supporterà il doppio d...
Vecchi Bitcoin, guadagno mostruoso: bale...
Nel 2018 Samsung snobbò NVIDIA: u...
Provare i vestiti senza mai uscire di ca...
SanDisk High Bandwidth Flash (HBF): un c...
Panasonic presenta Aquarea DHW, pompa di...
Il bracciale Meta leggerà i gesti...
iOS e Android sotto attacco: per l'antit...
A Verona dopo i monopattini ecco le e-bi...
Itch.io come Steam: al bando i giochi pe...
Digitalizzazione, identità e AI: ...
Kindle Colorsoft: arriva la versione da ...
Electra ottiene altri 433 milioni di eur...
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: 22:50.


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