|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2010
Messaggi: 42
|
[C]errore apertura file!
Codice:
#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;}
}
ps es file inserito E:M123:1:7\n U:M123:1:7\n |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
Ti propongo questa alternativa:
Codice:
if((fp=fopen(nomef,"r"))==NULL){
fprintf(stderr,"Errore nell'apertura del file %s",nomef);
exit(EXIT_FAILURE);
}
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: May 2010
Messaggi: 42
|
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!!
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
Quote:
ERRATO Codice:
scanf("%s",nomef);
Codice:
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);
}
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
nomef è già un puntatore, non serve usare l'operatore &.
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
Sei sicuro di aver inserito il nome del file con tanto di estensione?
Il file risiede nella directory del progetto?
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
Mi scuso per la cazzata...suggerita..sto semplicemente impazzendo...
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jan 2005
Città: Torino
Messaggi: 144
|
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.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:39.











...








