DOMANDA Aiuto Programmazione In C --> Fopen()!!

Pervy

Nuovo Utente
2
0
Ciao a tutti! Premetto di essere nuova nel forum e anche in c...
Sapreste dirmi per caso che errori possono incorrere quando si vuole lavorare su un file con la fopen?
Mi esce questo errore:
Process returned 255 (0xFF)
C:
FILE* file = fopen("Dati.csv","r");        
        if (file==NULL) {
       printf("errore nell'apertura del file\n");                          // controllo errori
        return -1;      
        }
    else
     {
Altra cosa: da questo file sono contenute diverse righe, ognuna delle quali contiene delle informazioni separate da virgole, ognuna da inserire in campi diversi di una struct. Posso farlo con una gets?
Ringrazio in anticipo,
Ciao!
 
Ultima modifica da un moderatore:

pabloski

Utente Èlite
2,868
916
Gli errori possibili sono gli stessi di quelli listati qui https://linux.die.net/man/2/open

Quel 255 e' il -1 che ritorni nel programma. L'errore invece prodotto dalla fopen e' contenuto nella variabile errno.

Riguardo le righe, no la gets non te lo consente, ma la fscanf si.

p.s. Pervy?? nick curioso LOL
 
Ultima modifica:

movlw

Nuovo Utente
32
6
CPU
AMD A4 5300
Dissipatore
Default
Scheda Madre
AsRock DG3+
HDD
Toshiba 500GB
RAM
Kingstone 8GB DDR3
GPU
APU HD7480D
Monitor
Benq FP71G+
PSU
ITEK
OS
Windows 10 64bit
Il codice come è scritto non va bene. Dovresti scriverlo come segue:
Codice:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    FILE *fp;
    ....
    fp = fopen("quelchevuoi", "r");
    if (NULL == fp)
    {
          ...
          return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}
I problemi nel tuo codice sono:
- dichiari fp in mezzo al codice e non all'inizio. So bene che il C99 supporta questo genere di dichiarazioni, ma al momento sono veramente pochi i compilatori che implementano questo standard. Per mantenere la compatibilità con il C89 è bene seguire le regole descritte nel K&R 2nd edition. Inoltre il C99 ha introdotto un sacco di schifezze perciò è meglio lasciarlo perdere.
- anziché uscire subito nel caso in cui fp fosse NULL, scrivi tutto in un else.
- usi -1 quando esistono macro apposite come EXIT_SUCCESS e EXIT_FAILURE che si fanno carico di restituire al sistema il valore corretto.

Inoltre i consigli dati sopra sono pesantemente errati. errno non dovrebbe mai essere usata, così come sscanf, in quanto insicura e problematica. Dovresti usare fgets in combinazione con strtok per estrarre i dati dal file CSV.
 

Pervy

Nuovo Utente
2
0
Grazie ad entrambi per i consigli ! Ora provo a seguirli sperando che vada meglio! :asd::thanks:

ps : avevo pensato alla fgets, ma non avrei poi saputo gestirla in quanto non so come trattare ogni riga separatamente :(
 

pabloski

Utente Èlite
2,868
916
Perche' usare funzioni non pensate per questo tipo di lavoro? La fscanf e' fatta apposta, accetta come input una stringa di formato, cioe' ti permette di modellare esattamente il formato del file csv. Per cui non dovrai nemmeno crearti una funzione per il parsing delle righe.
 
  • Mi piace
Reazioni: R3boot

R3boot

Utente Èlite
1,635
574
CPU
pentium dual core
HDD
320gb
RAM
4giga
GPU
ati
OS
linux
@pabloski ciao ! è sempre un piacere leggerti, peccato che nella sezione linux non ti si vede più :cry:
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili