Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-04-2008, 18:47   #1
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
[c] aiuto I/O file

questo è il listato:

Codice HTML:
FILE *pass

void database()
{    char selezione,ambulanza[20];
     int n=0;
     
     do
     {
     system("cls");
     
     pass=fopen("ambulanze.dat","r");
     
     if (pass==NULL) printf("Impossibile aprire il file\n\n");   
     else
     {        do
              {
              fread(ambulanza,sizeof(ambulanza),1,pass); 
              printf("%s",ambulanza);
              }while(!feof(pass));
     fclose(pass);
     }
         
          
     
     printf("\nAggiungere nuove ambulanze? S/N");
     scanf("%c",&selezione);
     
     if (selezione=='s')  
        {
          
          printf("Inserisci l'associazione di appartenenza: ");
          scanf("%s",ambulanza);
          printf("Confermi: %s? S/N",&ambulanza);
          scanf("%s",&selezione);
           
           if (selezione == 's')
              {  for(n=0;n<20;n++) if (ambulanza[n]=='\0') ambulanza[n+1]='\n';
                 pass=fopen("ambulanze.dat","a");
                 if (pass==NULL) printf("impossibile aprire il file o file non presente\n\n");
                    else
                    { fwrite(ambulanza,20,1,pass);
                      fclose(pass);
                    }  
              } 
         }
     }while (selezione != 'n'); 
     system("pause");
     menu();
}
scrive tranquillamente il contenuto soltanto che non riesce a leggerlo.. se non il primo elemento.. avete la soluzione? sono ben accette modifiche al listato e company.. io utilizzo il dev-c++ su windows.
Grazie
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2008, 21:32   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da deviato Guarda i messaggi
Codice HTML:
          printf("Confermi: %s? S/N",&ambulanza);
          scanf("%s",&selezione);
Devi usare %c, non %s (come tra l'altro hai già fatto poco prima).

Non ho capito perché devi fare questo loop:
for(n=0;n<20;n++) if (ambulanza[n]=='\0') ambulanza[n+1]='\n';

Giusto per chiarire: quello che c'è e che scrivi nel file non sono proprio solo "righe" di testo ma blocchi di 20 byte esatti. Se nell'array 'ambulanza' il testo che inserisci è più corto, dopo il nullo finale (messo da scanf) c'è sicuramente "spazzatura".

Inoltre ti segnalo, se lo accetti, che dovresti curare un pochino di più lo stile di scrittura del sorgente e mi riferisco in particolare alla indentazione.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2008, 23:48   #3
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
Ok! attualmente il listato è il seguente:

Codice HTML:
void database()
{    char selezione,ambulanza[20];
         
     do
     {
     system("cls");
     
     pass=fopen("ambulanze.dat","r");
     
     if (pass==NULL) printf("Impossibile aprire il file\n\n");   
     else
     {        do
              {
              fread(ambulanza,20,1,pass); 
              printf("%s",ambulanza);
              clear(pass);
              }while(!feof(pass));
     fclose(pass);
     }
         
          
     
     printf("\nAggiungere nuove ambulanze? S/N");
     scanf("%c",&selezione);
     
     if (selezione=='s')  
        {
          
          printf("Inserisci l'associazione di appartenenza: ");
          scanf("%s",ambulanza);
          printf("Confermi: %s? S/N",&ambulanza);
          scanf("%c",&selezione);
           
           if (selezione == 's')
              {  pass=fopen("ambulanze.dat","a");
                 if (pass==NULL) printf("impossibile aprire il file o file non presente\n\n");
                    else
                    { fwrite(ambulanza,20,1,pass);
                      fclose(pass);
                    }  
              } 
         }
     }while (selezione != 'n'); 
     system("pause");
     menu();
}
il problema purtroppo resta il medesimo.. come potrei fare per far si che quella "spazzatura" non venga registrata nel file? devo anche considerare che poi il file devo leggerlo e ciò mi comporta una lettura di un blocco prestabilito.. hai qualche soluzione da suggerirmi? si lo so la scrittura non appare molto bella.. ma sn alle prime armi e sto facendo un pochina di pratica..
Grazie
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 10:14   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da deviato Guarda i messaggi
come potrei fare per far si che quella "spazzatura" non venga registrata nel file? devo anche considerare che poi il file devo leggerlo e ciò mi comporta una lettura di un blocco prestabilito..
Ma non è detto ... dipende da come deve essere gestito il file. Mi spiego meglio. Usare dei "record" di lunghezza fissa è indispensabile nei casi in cui è necessario poter accedere al record i-esimo in modo "casuale" (proprio perché grazie alla lunghezza fissa del record posso calcolare l'offset). Inoltre se si usano dei "record" di lunghezza fissa tipicamente è perché si devono scrivere dei dati "binari" con una struttura ben nota e prestabilita.

Non mi sembra che sia il tuo caso. Devi scrivere stringhe testuali di lunghezza anche diversa e la lettura che fai all'inizio è di tipo "sequenziale".

Quote:
Originariamente inviato da deviato Guarda i messaggi
hai qualche soluzione da suggerirmi?
Se è come ho appena detto poco fa, allora ti conviene gestire il file a "righe" di testo, come un normale file di testo che si scrive con Notepad e simili.

Usa fgets() per leggere una riga (occhio ci sono alcune questioni da tenere presente, vedi la documentazione) e usa fprintf() per scrivere la riga sul file.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 12:14   #5
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
Si infatti inizialmente avevo risolto in quel modo solo che poi in un'altra funzione ho bisogno che siano salvati tutti come record distinti.. e questo mi sta creando non pochi problemi..
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 12:41   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se devi lavorare su un reacord salva e leggi il record intero.

Mettiamo che la struct sia questa:
Codice:
struct pippo
{
   char s1[20];
   char s2[30];
   int a;
   int b;
   double y;
};
per salvare l'intera struct:

struct pippo pluto;
/* al posto di questa riga pluto viene riempito con i dati */
/* scrivo nel file dopo averlo aperto ovviamente */
fwrite(&pluto, sizeof(struct pippo), 1, out);


Per leggere:
struct pippo pluto;

/*apro il file e leggo*/
fread(&pluto, sizeof(struct pippo), 1, in);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 13:06   #7
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
ho fatto come dicevi te.. ovviamente al posto di in e out ho messo il puntatore del mio file..
Mi è apparso il seguente errore:

Codice HTML:
 [Linker error] undefined reference to `clear' 
  ld returned 1 exit status 
   C:\Documents and Settings\Alessio\Desktop\118_firenze_soccorso\Makefile.win [Build Error]  [118_firenze_soccorso.exe] Error 1
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 13:12   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
L'errore è altrove...hai messo da qualche parte l'istruzione clear che non è un istruzione valida.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 13:14   #9
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
il fatto è che questo clear non c'è..
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 13:16   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi sembra strano. Prova a fare un nuovo progetto.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 13:58   #11
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2795
Nel secondo listato che hai postato però un clear c'è. Dentro al secondo do-while, magari non l'hai notato...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 15:17   #12
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
si lo so ma era già stato levato..
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 15:49   #13
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
ho scritto questo programmino per prova.. solo che non capisco perchè l'ultimo valore inserito nel file me lo scrive per 2 volte..

Codice HTML:
#include <stdio.h>

FILE *pf;


main()
{char pluto[20];
     printf("Indirizzo: ");
     scanf("%s",pluto);
     pf=fopen("servizi.dat","a");
     if (pf==NULL) printf("Impossibile aprire il file\n\n");   
       else
        {
         fwrite(&pluto,sizeof(pluto),1,pf);
         fclose(pf);
        }
     pf=fopen("servizi.dat","r");
     if (pf==NULL) printf("Impossibile aprire il file\n\n");   
       else
        {     
        do
          {   
              fread(&pluto,sizeof(pluto),1,pf);
              printf("%s\n",pluto);
          }while(!feof(pf));
        }
        system("pause");
}
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 16:00   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
feof rileva la fine del file dopo che una lettura fallisce, quindi devi farlo così:
Codice:
        do
          {   
              fread(&pluto,sizeof(pluto),1,pf);
              if(!feof(pf)) printf("%s\n",pluto);
          }while(!feof(pf));
Oppure:
Codice:
while(1)
{   
   fread(&pluto,sizeof(pluto),1,pf);
   if(feof(pf))
   {
       break;
   }
   printf("%s\n",pluto);
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 16:05   #15
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
ok grazie mille cionci e grazie anche a tutti gli altri siete dei grandi!!
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 16:13   #16
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
In genere basta fare:

Codice:
while (fread (&pluto,sizeof(pluto),1,pf) == 1)
{
    /* usa pluto */
}
Eventualmente dopo il loop si può controllare se la causa della fine del loop è stato un errore usando ferror().
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 16:18   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì, vero, si può controllare anche il valore di ritorno di fread che deve essere pari al terzo parametro
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 16:43   #18
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
ho fatto il programmino di prova e funziona.. sapete dirmi perchè qua mi scrive ma continua a non leggermi i valori nel file?

Codice HTML:
void database()
{    char selezione,ambulanza[20];
         
     do
     {
     system("cls");
     
     pass=fopen("ambulanze.dat","r");
     
     if (pass==NULL) printf("Impossibile aprire il file\n\n");   
     else
     {        
          do
          {   
           fread(&ambulanza,sizeof(ambulanza),1,pass);
           if (!feof(pass)) printf("%s\n",&ambulanza);
          }while(!feof(pass));
          fclose(pass);
     }
         
          
     
     printf("\nAggiungere nuove ambulanze? S/N");
     scanf("%s",&selezione);
     
     if (selezione=='s')  
        {
          
          printf("Inserisci l'associazione di appartenenza: ");
          scanf("%s",ambulanza);
          printf("Confermi: %s? S/N",ambulanza);
          scanf("%s",&selezione);
           
           if (selezione == 's')
            {
              pass=fopen("ambulanze.dat","a");
              if (pass==NULL) printf("Impossibile aprire il file\n\n");   
                 else
                 {
                  fwrite(&ambulanza,sizeof(ambulanza),1,pass);
                  fclose(pass);
                 }
           }
        }
     }while (selezione != 'n'); 
     system("pause");
     menu();
}
deviato è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 16:46   #19
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Aggiungo ancora un'ultimissima cosa: se si usano fread/fwrite per leggere/scrivere, come è appunto tipico, dati binari, è bene aprire il file in modalità "binaria", usando "rb", "wb" ecc...
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2008, 17:24   #20
deviato
Member
 
Iscritto dal: Feb 2008
Messaggi: 70
ma la lettura di file che contengono stringe non è binario giusto? cmq ci sono degli errori? perchè scrivere mi scrive bene.. è la lettura che non va..
deviato è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
AMD mette la freccia e si prepara allo s...
Sony Santa Monica posticipa God of War L...
Il telescopio spaziale Swift è ri...
Black Friday HONOR, prezzi giù fi...
AliExpress sfida Amazon sui prezzi: e-bi...
Gemini sotto accusa in Ungheria: per l'a...
Windows 11 può girare sulla NPU invece d...
MediaWorld diventa cinese: l'UE dice s&i...
Akamai potenzia il proprio cloud con due...
Steam, Valve cambia le regole: le revisi...
Canva licenzia (anche) per colpa dell'IA...
Axerta: l’IA traina la crescita delle te...
Galaxy A38, la batteria cresce ma il pre...
Notifica su Facebook: 'Effettuerai la mi...
Xbox pronta a dire addio allo studio di ...
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: 00:32.


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