Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    8

    [C] Utilizzo funzioni e strutture

    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:
    codice:
    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:
    codice:
    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 ):
    codice:
    #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
    Jack

  2. #2

    Moderazione

    Il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione.

    Ora correggo io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    ciao, in void acquisizione nella scanf hai messo la formattazione per gli interi %d, mentre credo dovresti prenderlo in %s.

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Inoltre, stai attento che

    codice:
    void acquisizione(struct club n){
    
    void registrazione(struct club n){
    Stai lavorando con delle copie, non con l'oggetto che hai nel main.
    infine,

    codice:
    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

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    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 &
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    8
    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?
    Jack

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    club.iscritti[x].numtessera = y;

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

    Si naviga usando l'operatore .
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.