PDA

Visualizza la versione completa : [C] Utilizzo funzioni e strutture


Yusuke
22-08-2013, 17:23
Salve a tutti. Il testo del mio problema è questo:

Un programma in linguaggio C deve gestire i dati degli iscritti ad un club escursionistico.
Per rappresentare un iscritto viene definito il tipo di dato struct iscritto:


struct iscritto{
char nome[30]; // nome dell’iscritto
char cognome[30]; // cognome
int eta; // età
int numtessera; // numero di tessera
};
Il numero massimo di iscritti al club è dato dalla costante MAXI (definita mediante la
direttiva #define). Il club viene rappresentato mediante il seguente tipo di dato:


struct club{
char nome[30]; // nome del club
int numiscritti; // numero di iscritti effettivi
struct iscritto iscritti[MAXI]; // insieme degli iscritti
};
QUESITO 1: si scriva una funzione che, ricevendo in ingresso un parametro di tipo struct
club, ne acquisisce da tastiera il nome e imposta il numero di iscritti a 0.
QUESITO 2: si scriva una funzione che, ricevendo in ingresso un parametro di tipo struct
club, aggiunge un nuovo iscritto acquisendone i dati da tastiera. Il numero di tessera deve
essere assegnato progressivamente (1 per il primo iscritto, 2 per il secondo, ecc.)



E questa è la soluzione che ho provato a dare (con scarsi risultati ):


#include<stdio.h>
#include<stdlib.h>
#define MAXI 10
struct iscritto {
char nome[30];
char cognome[30];
int eta;
int numtessera;
};



struct club{
char nome[30];
int numiscritti;
struct iscritto iscritti[MAXI];
};


void acquisizione(struct club n){

n.numiscritti=0;
scanf("%d",&n.nome);


}

void registrazione(struct club n){
n.numiscritti=1;
n.iscritti[10].numtessera=0;
if(n.numiscritti<=MAXI){

scanf("%s",n.iscritti[n.numiscritti].nome);
scanf("%s",n.iscritti[n.numiscritti].cognome);
scanf("%d",&n.iscritti[n.numiscritti].eta);
n.iscritti[n.numiscritti].numtessera=n.iscritti[n.numiscritti].numtessera +1;
n.numiscritti=n.numiscritti+1;
}
}



int main(int argcv, char *argv[]){
struct club clu;
acquisizione(clu);
printf("il numiscritti e' %d\n",clu.numiscritti);
printf("Il nome del club e' %d\n",clu.nome);
registrazione(clu);
printf("Nome: %s\n",clu.iscritti[clu.numiscritti].nome);
printf("Cognome: %s\n",clu.iscritti[clu.numiscritti].nome);
printf("Eta': %d",clu.iscritti[clu.numiscritti].eta);
system("pause");
}


Mi sapreste dare un aiutino a gestire la grammatica del mio codice?
Grazie in anticipo

MItaly
22-08-2013, 18:25
Il codice va specificato tra tag
... , altrimenti perde l'indentazione.

Ora correggo io, in futuro ricordatene.
:ciauz:

glukosio
23-08-2013, 10:56
ciao, in void acquisizione nella scanf hai messo la formattazione per gli interi %d, mentre credo dovresti prenderlo in %s.

boots
23-08-2013, 11:27
Inoltre, stai attento che



void acquisizione(struct club n){

void registrazione(struct club n){


Stai lavorando con delle copie, non con l'oggetto che hai nel main.
infine,



void registrazione(struct club n){
n.numiscritti=1;
n.iscritti[10].numtessera=0;


la prima istruzione non serve...per di più così ogni iscritto avrà lo stesso numero di tessera
la seconda, proprio non l'ho capita :D

Alex'87
23-08-2013, 11:30
Originariamente inviato da glukosio
ciao, in void acquisizione nella scanf hai messo la formattazione per gli interi %d, mentre credo dovresti prenderlo in %s.

Inoltre in questo caso non serve &

Yusuke
23-08-2013, 12:54
Grazie per le risposte: sono tutte utilissime.

[CODE]

n.iscritti[10].numtessera=0;

[\CODE]

Questa non va bene perchè è una cosa inventata no? Ecco, perchè era qui che avevo i maggiori dubbi, solo che i testi di riferimento non fanno un esempio di questo genere. Quello che non riesco a capire è come faccio ad assegnare un valore ad un int contenuto nella struct iscritto che a sua volta è contenuta nella struct club. Il mio problema è che sono ignorantissimo in materia. Sapreste spiegarmelo?

Alex'87
23-08-2013, 13:09
club.iscritti[x].numtessera = y;

dove x è la posizione e y il valore da dare alla tessera...

Si naviga usando l'operatore .

Loading