PDA

View Full Version : [C]errore apertura file!


blu1988
21-07-2010, 14:45
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLEN 10+2
#define MAX 255
typedef struct elenco_s elenco_t;

struct elenco_s{
char stato;
char sesso;
int id;
int day;
int h;
elenco_t *next;
};


elenco_t*load(FILE*);
elenco_t*NewE();
void check(elenco_t*);




main(){

FILE*fp;
elenco_t *elenco;
char nomef[MAX];

printf("Inserire nome file con soci>");
scanf("%s",nomef);
//open&check
fp=fopen(nomef,"r");
if(fp==NULL){
printf("errore apertura file");
exit(1);
}
elenco=load(fp);
fclose(fp);
check(elenco);



}


//funzioni

//newE
elenco_t*NewE(){
elenco_t*tmp;

tmp=(elenco_t*)malloc(1*sizeof(elenco_t));
if(tmp==NULL){
printf("errore allocazione");
exit(1);
}
return(tmp);

}
//load
elenco_t*load(FILE* fp){

char buff[MAXLEN];
char stato,sesso;
int id,day,h;
elenco_t*p;
elenco_t*head=NULL;

while(fgets(buff,MAXLEN,fp)!=NULL){
sscanf(buff,"%c:%c%d:%d:%d",&stato,&sesso,&id,&day,&h);

p=NewE();

p->stato=stato;
p->sesso=sesso;
p->id=id;
p->day=day;
p->h=h;
p->next=head;
head=p;
}
return(head);
}


//check

void check(elenco_t*elenco){

elenco_t*p;

p=elenco;

while(p!=NULL){
printf("stato=%c\nsesso=%c\nid=%d\nday=%d\nh=%d\n,p->stato,p->sesso,p->id,p->day,p->h");
p=p->next;}


}


ciao a tutti...vorrei sapere perchè quando inserisco il nome del file che deve leggermi e caricarmi in lista mi da errore apertura file(che sarebbe il comando che mi stampa quando fp==NULL)...dove sbaglio?


ps
es file inserito

E:M123:1:7\n
U:M123:1:7\n

tuccio`
21-07-2010, 16:23
immagino che tu ti sia accertato che il file esista, quindi: il nome del file contiene degli spazi? scanf("%s", ..) legge fino allo spazio, puoi usare gets al suo posto

ciusss89
21-07-2010, 16:34
Ti propongo questa alternativa:

if((fp=fopen(nomef,"r"))==NULL){
fprintf(stderr,"Errore nell'apertura del file %s",nomef);
exit(EXIT_FAILURE);
}

Ricordati che il c è case sensitive..cmq nella tua acquisizione non mi sembrava ci fossero errori

blu1988
21-07-2010, 17:26
nessuno spazio...non so davvero perchè mi dia questo errore....il fatto è che me lo da sia su codeblocks che su dev...quindi penso sia qualcosa nel codice...il nome del mio file è in.txt...ma questo mi capita con il 90% dei programmi che scrivo!!

ciusss89
21-07-2010, 18:50
nessuno spazio...non so davvero perchè mi dia questo errore....il fatto è che me lo da sia su codeblocks che su dev...quindi penso sia qualcosa nel codice...il nome del mio file è in.txt...ma questo mi capita con il 90% dei programmi che scrivo!!

Ecco il tuo errore...sai qnt volte l'ho fatto pure io..

ERRATO
scanf("%s",nomef);
CORRETTO
printf("Inserire nome file con soci>");
scanf("%s",&nomef);
//open&check
if((fp=fopen(nomef,"r"))==NULL){
fprintf(stderr,"Errore apertura file %s",nomef);
exit(EXIT_FAILURE);
}

cionci
21-07-2010, 19:11
nomef è già un puntatore, non serve usare l'operatore &.

tuccio`
21-07-2010, 19:25
Ecco il tuo errore...sai qnt volte l'ho fatto pure io..

ERRATO
scanf("%s",nomef);
CORRETTO
printf("Inserire nome file con soci>");
scanf("%s",&nomef);
//open&check
if((fp=fopen(nomef,"r"))==NULL){
fprintf(stderr,"Errore apertura file %s",nomef);
exit(EXIT_FAILURE);
}e continui a farlo :x

Rsk
21-07-2010, 19:34
[CODE]


Sei sicuro di aver inserito il nome del file con tanto di estensione?
Il file risiede nella directory del progetto?

ciusss89
21-07-2010, 20:34
nomef è già un puntatore, non serve usare l'operatore &.

Mi scuso per la cazzata...suggerita..sto semplicemente impazzendo...:D

Isildur84
21-07-2010, 23:27
La butto lì, non insultarmi. Non è che usi windows e hai nascosto le estensioni dei file conosciuti? In questo modo il file che tu pensi si chiami file.txt in realtà si chiama file.txt.txt.