Copiare record(stringa) in un altro record(di stringhe)

di il
4 risposte

Copiare record(stringa) in un altro record(di stringhe)

Mi da errore nel testo in grassetto e sottolineato,vado un pò in confusione con le stringhe.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 150

typedef struct{
char cog[9]; //cognome
char nom[8]; // nome
char data[11]; // data di nascita
char prov[3]; // provincia
float quot; // quota
char pagato[3]; //pagato
}TVacanza;

void leggi(TVacanza v[], int *n);
void ordina (TVacanza v[], int n);
void statistica(TVacanza v[], int n);
float totale(TVacanza v[], int n);
void visualizza(TVacanza v[], int n);

int main() {
TVacanza v[NMAX];
int n=0;

leggi(v,&n);
ordina(v,n);
statistica(v,n);
totale(v,n);
visualizza(v,n);


}

void leggi(TVacanza v[], int *n){
int i;
char st[80];
char cognome[30], nome[40], datan[11], provincia[4], quota[9], pagat[6];

FILE *fp=fopen("elenco.txt","r");
fgets(st,80,fp);

i=0;
while(!feof(fp)){
fgets(st,80,fp);
sscanf(st,"%[^'|']|%[^'|']|%[^'|']|%[^'|']|%[^'|']|%[^'\n']\n",cognome,nome,datan,provincia,quota,pagat);
strcpy(v.cog, cognome);
strcpy(v.nom, nome);
strcpy(v.data, datan);
strcpy(v.prov, provincia);
v.quot=atof(quota);
strcpy(v.pagato, pagat);
i++;
}
*n=i;
fclose(fp);
}
void ordina(TVacanza v[], int n){
int i;
TVacanza tmp;


for(i=0;i<n-1;i++){
if(v.quot>v[i+1].quot){
tmp=v;
v=v[i+1];
v[i+1]=tmp;
}
}
}
void statistica(TVacanza v[], int n){
float a=0;
int i;
char tmp1[4];
char tmp2[4];
char z[]="NO";
char s[]="SI";
float si=0;
float no=0;
float p1=0;
float p2=0;

for(i=0;i<=n-1;i++)
if(strcmp( v.pagato,s)==0){
strcpy(tmp1,TVacanza v[]);
}else if(strcmp(v[i].pagato,z)==0){
strcpy(tmp2,TVacanza v[]);
}


for(i=0;i<n-1;i++){
si+=tmp1[i];
p1=v[i].quot*100/si;
}

for(i=0;i<n-1;i++){
no+=tmp2[i];
p2=v[i].quot*100/si;
}
}

float totale(TVacanza v[], int n){

}

void visualizza(TVacanza v[], int n){
int i;
for(i=0;i<n-1;i++){
printf("%10s",v[i].cog);
printf("%10s",v[i].nom);
printf("%12s",v[i].data);
printf("%5s",v[i].prov);
printf("%13.1f",v[i].quot);
printf("%5s\n",v[i].pagato);
}

}

4 Risposte

  • Re: Copiare record(stringa) in un altro record(di stringhe)

    strcpy(tmp1,TVacanza v[]);
    Ci sono diverse cose che non vanno, stai cercando di usare una funzione dichiarando un tipo.

    Dovresti voler copiare in tmp1 il contenuto all'indice x del vettore v, e si fa così:
    strcpy(tmp1, v[x]);
    Però adesso c'è un'inconsistenza di tipi vale a dire v è di tipo TVacanza e tmp1 di tipo char *.

    Prova a spiegare che cosa vorresti fare e vediamo come fare e perchè.

    P.s. Usa i tag code e indenta il codice è difficile leggere così come hai scritto tu.
  • Re: Copiare record(stringa) in un altro record(di stringhe)

    Vorrei copiare l'intero record che di trova all'indice 0 in un array temporaneo ovvero suddividere in base alla condiziona messa.
  • Re: Copiare record(stringa) in un altro record(di stringhe)

    Se vuoi copiare l'intero record all'indice i-esimo del vettore v che è di tipo TVacanza, ti basta dichiarare una variabile tmp di tipo TVacanza e scrivere:

    tmp = v;
  • Re: Copiare record(stringa) in un altro record(di stringhe)

    Risolto grazie mille,ho trovato l'errore .
Devi accedere o registrarti per scrivere nel forum
4 risposte