PDA

View Full Version : [ C ] PROBLEMA ACCESSO AD UNA STRUTTURA


ciusss89
02-07-2009, 12:25
Salve ragazzi in fase di compilare di un codice cosi composto, 2 strutture 2 funzioni nel main, il problema è in compilazione di una parte del codice voglio salvere il campo letto all'interno della struttura..(accesso alla struttura all'interno di una funzione non credo che ci siano arrori nel passaggio dei parametri ma non riesco a capire)....



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define name 10
#define campo 4


typedef struct {
int nf;
char ids[campo];
}fid_nf;

typedef struct {
char fornitore[campo];
int prezzo;
}fornitori;

void read(FILE* fin1 , fid_nf*, int, fornitori* );
void idcost(FILE* fin1 , fid_nf*, fornitori*);


int main(int argc, char *argv[]){
fid_nf *str1;
fornitori *str2;
int r;
char in1[name],out1[name];
FILE *fin1,*fout1;
if(argc!=3){
fprintf(stderr,"ERROR IN/OUT");
exit (EXIT_FAILURE);
}
strcpy(in1,argv[1]);
strcpy(out1,argv[2]);
if((fin1=fopen(in1,"r"))==NULL){
fprintf(stderr,"ERROR READ FILE");
exit (EXIT_FAILURE);
}
if((fout1=fopen(out1,"w"))==NULL){
fprintf(stderr,"ERROR WRITE FILE");
exit (EXIT_FAILURE);
}
fscanf(fin1, ("%d") ,&r);
read(fin1,str1,r,str2);


return 0;
}

void read (FILE* fin1 , fid_nf* str1, int r, fornitori* str2 ){
char id[4];
int n,cont;
str1=(fid_nf*)malloc(r*sizeof(fid_nf));
if(str1==NULL){
fprintf(stderr,"ERROR MEMORY IS FULL");
exit (EXIT_FAILURE);
}
while ( fscanf(fin1, "%s%d", &id , &n)!=EOF ){
fid_nf[cont].nf=n;
strcpy(fid_nf[cont].ids, id);
idcost(fin1,str1,str2);
cont++;
}
return;
}
void idcost(FILE* fin1 , fid_nf* str1, fornitori* str2){
return;
}


OUTPUT DEL COMPILATORE DEV C ALLE RIGHE IN ROSSO:
C:\Documents and Settings\giuse\Desktop\esegui\Untitled1.c In function `read':
60 C:\Documents and Settings\giuse\Desktop\esegui\Untitled1.c syntax error before '[' token
61 C:\Documents and Settings\giuse\Desktop\esegui\Untitled1.c syntax error before "fid_nf"


grazie in anticipo a tutti

ESSE-EFFE
02-07-2009, 13:41
fid_nf[cont].nf=n;
strcpy(fid_nf[cont].ids, id);



La variabile è str1, non fid_nf!

HTH,

ciusss89
02-07-2009, 14:12
La variabile è str1, non fid_nf!

HTH,

:D grazie 1000 ho risolto!

cionci
02-07-2009, 18:56
Non puoi aprire un thread con solamente scritto il linguaggio, ricordatelo la prossima volta.

ciusss89
03-07-2009, 11:05
Rieccomi; dopo aver risolto il problema di salvare il campo letto nella struttura mi sono imbattuto in un altro problema....
la terza funzione deve oridinare il primo campo della struttura; avevo scritto un algoritmo di ordinamento; per vedere se andava ho messo un printf in mezzo ai for per vedere l'output a video e avere una mezzo idea del corretto funzionamento......:O .....dato che venivano sparata cose senza senso ho provato a SOLO a leggere e stampare a video quello che avevo memorizzato nelle precenti strutture.......l'output mi lascia perplesso nella struttura ci sono solo caratteri ascii strani niente di cio che avevo scirtto prima...

ORA che le precedenti funioni andavano ne sono sicuro.

il PROBLEMA é che non riesco ad accede a cio che ho salvato prima...come posso ordinarlo se nemmeno lo leggo?.....:banned: :)



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define name 10
#define campo 4


typedef struct {
int nf;
char ids[campo];
}fid_nf;

typedef struct {
char fornitore[campo];
int prezzo;
}fornitori;


void read(FILE* fin1 , fid_nf*, int, fornitori* );

void idcost(FILE* fin1 , fid_nf*, fornitori*, int );

void ord_fid(fid_nf*,int);


int main(int argc, char *argv[]){
fid_nf *str1;
fornitori *str2;
int r;
char in1[name],out1[name];
FILE *fin1,*fout1;
if(argc!=3){
fprintf(stderr,"ERROR IN/OUT");
exit (EXIT_FAILURE);
}
strcpy(in1,argv[1]);
strcpy(out1,argv[2]);
if((fin1=fopen(in1,"r"))==NULL){
fprintf(stderr,"ERROR READ FILE");
exit (EXIT_FAILURE);
}
if((fout1=fopen(out1,"w"))==NULL){
fprintf(stderr,"ERROR WRITE FILE");
exit (EXIT_FAILURE);
}
fscanf(fin1, ("%d") ,&r);
read(fin1,str1,r,str2);
//debug !ok strutture riempite!
fclose(fin1);

return 0;
}


void read (FILE* fin1 , fid_nf* str1, int r, fornitori* str2 ){
char id[campo];
int n,cont;
cont=0;
str1=(fid_nf*)malloc(r*sizeof(fid_nf));
if(str1==NULL){
fprintf(stderr,"ERROR MEMORY IS FULL. REQUEST DENIED FOR STR1");
exit (EXIT_FAILURE);
}
while ( fscanf(fin1, "%s%d", &id , &n)!=EOF ){
str1[cont].nf=n;
strcpy(str1[cont].ids, id);
//debug !ok fprintf(stdout,"%s %d ",str1[cont].ids,str1[cont].nf);
idcost(fin1,str1,str2,n);
cont++;
}
return;
}

void idcost(FILE* fin1 , fid_nf* str1, fornitori* str2, int campi ){
int cost,cont;
char vend[campo];
//debug !ok printf("%d",campi); BUILD MEMORY FOR STR2
str2=(fornitori*)malloc(campi*sizeof(fornitori));
if(str2==NULL){
fprintf(stderr,"ERROR MEMORY IS FULL FOR. REQUEST DENIED FOR STR2");
exit (EXIT_FAILURE);
}
for(cont=0; cont<campi; cont++){
fscanf(fin1, "%s %d", &vend , &cost);
strcpy(str2[cont].fornitore,vend);
str2[cont].prezzo=cost;
//debug !ok fprintf(stdout,"%s %d ",str2[cont].fornitore,str2[cont].prezzo);
}

return;
}

void ord_fid(fid_nf* str1,int r){
fprintf(stdout,"1:%s 2:%d ",str1[1].ids,str1[1].nf);
return;
}




In verde la funzione che ordinera...in rosso la fprintf...


GRAZIE per l'aiuto e a cionci per avermi riapero la discussione!

ciusss89
03-07-2009, 12:03
ragazzi c'è qualcuno?