Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: [c] strutture

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171

    [c] strutture

    devo fare questo esercizio:

    Definire le strutture necessarie a ospitare le informazioni relative all'anagrafica di
    studenti e insegnanti. È sufficiente una rappresentazione semplificata delle
    informazioni che effettivamente si vorrebbe potere memorizzare.
    Riutilizzare per quanto possibile membri comuni. Per esempio l’indirizzo, che
    potrebbe essere composto dei membri via_corso_piazza, numero_civico,
    cap, citta, nazione è comune sia agli studenti sia agli insegnanti.
    Definire inoltre la struttura necessaria a descrivere i libri (titolo, autore/i, editore,
    ISBN, argomento, anno di pubblicazione, indirizzo web, etc.).
    Definire una struttura corso, contenente uno o più insegnanti, un numero variabile
    di studenti, e uno o più libri di testo.
    ATTENZIONE! È necessario definire tutti gli oggetti complessi. Per esempio
    l'indirizzo, membro delle strutture studenti e insegnanti, è a sua volta una struttura.

    Scrivere le funzioni per l'immissione delle informazioni relative a tutte le strutture (e
    relativi membri) menzionate nell'esercizio precedente, e per la visualizzazione.
    Sperimentare il passaggio delle strutture sia per valore sia per riferimento.


    ho provato a fare cosi ma mi da errore


    codice:
    #include<stdio.h>
    #include<string.h>
    
    
    struct data_nascita{
           int giorno;
           char mese[10];
           int anno;
           };
           
    struct indirizzo{
           char via[300];
           int numero;
           int CAP;
           char nazione[30];
           char citta[30];
           char provincia[2];
           };
           
    struct studenti{
           char nome[20];
           char cognome [20];
           struct data_nascita d_t;
           struct indirizzo ind;
           int matricola;
           };
           
    struct insegnanti{
           char nome[20];
           char cognome [20];
           struct data_nascita d_t;
           struct indirizzo ind;
           };
           
    struct libri{
           char titolo[30];
           char autore[30];
           char editore[30];
           char ISBN[30];
           int anno_publicazione;
           };
           
    struct corso{
           struct studenti std;
           struct insegnanti ins;
           struct libri lib;
           };
          
    int ins (int);
    void vis (struct corso *);
    void vis_cor(void);
    
    struct corso b[10];
    int ind =0; 
    main(){
          
          
           printf("1. inserisci\n 2.visualizza\n ");
           int scelta;
           scanf("%d",&scelta);
           switch (scelta){
              case 1: ind = ins(ind);
              break;
              case 2: vis_cor();
              break;
              }
           
    
           }
           
           
          int ins(int a){
                if(a>10){
                printf("non ce piu spazio");
                 }
                 printf("inserisci");
                 printf("studenti");
                 gets(b[a].std);
                 printf("insegnanti");
                 gets(b[a].ins);
                 printf("libri");
                 gets(b[a].lib);
                 a++;
                 return(a);
                 }
            
            void vis(struct corso *p){
              printf("studente %s", p->std);
              printf("insegnante %s",p->ins) ;
              printf("libro %s", p->lib);
              }                  
                   
            void vis_cor(void){
              int i;
              struct corso *ps = &b[0];
              for(i=0; i<ind;i++){
                       vis(ps++);
                       }
                       }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se scrivi

    "ho provato a fare cosi ma mi da errore"

    senza dire nulla dell'errore e dove si manifesta, non ti risponderà molta gente ..
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Guarda bene questa funzione:

    void vis(struct corso *p)
    {
    printf("studente %s", p->std);
    printf("insegnante %s",p->ins) ;
    printf("libro %s", p->lib);
    }

    Stai cerando di fare stampare a video una struttura e non una stringa..
    Questo e' un errore.
    Se provi per esempio a fare printf("Nome studente: %s",(p->std).nome) l'errore scompare.

  4. #4
    Poi nelle varie chiamate alla gets, per esempio gets(b[a].std), passi come argomento una struttura, mentre la funzione gets accetta una stringa,infatti e' definita cosi..char *gets(char *s).
    Prova a correggere queste cose da solo,se non riesci chiedi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    l'errore come ha detto ignaziodeblasi lo da sulla gets.
    come dice il testo io dovrei fare una funzione che mi inserisca i dati nei campi delle strutture.
    quindi dovrei fare una gets per ogni campo di ogni struttura .
    tipo cosi :
    codice:
    gets(b[a].nome);
    gets(b[a].cognome);
    gets(b[a].indirizzo);
    e cosi per tutte le altre strutture ?
    facendo cosi li salva nell'array b di corso ?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Con la gets devi utilizzare le stringhe non dei valori numerici.

    Studia la documentazione della gets

    http://www.cplusplus.com/reference/c...y/cstdio/gets/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Altrimenti prova ad usare la scanf()..

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    si e vero scusa avevo sbagliato.
    gli interi li posso scrivere con la scanf;

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sicuramente non puoi con la gets ...

    Apporta le correzioni e fai attenzione alla sintassi della scanf ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    codice:
    #include<stdio.h>
    #include<string.h>
    
    
    struct data_nascita{
           int giorno;
           char mese[10];
           int anno;
           };
           
    struct indirizzo{
           char via[300];
           int numero;
           int CAP;
           char nazione[30];
           char citta[30];
           char provincia[2];
           };
           
    struct studenti{
           char nome[20];
           char cognome [20];
           struct data_nascita d_t;
           struct indirizzo ind;
           int matricola;
           };
           
    struct insegnanti{
           char nome[20];
           char cognome [20];
           struct data_nascita d_t;
           struct indirizzo ind;
           char materia[30];
           };
           
    struct libri{
           char titolo[30];
           char autore[30];
           char editore[30];
           char ISBN[30];
           int anno_publicazione;
           };
           
    struct corso{
           struct studenti std;
           struct insegnanti ins;
           struct libri lib;
           };
          
    int ins (int);
    void vis (struct corso *);
    void vis_cor(void);
    
    struct corso b[10];
    int ind =0; 
    
    
    main(){
          
          
           printf("1. inserisci\n 2.visualizza\n ");
           int scelta;
           scanf("%d",&scelta);
           switch (scelta){
              case 1: ind = ins(ind);
              break;
              case 2: vis_cor();
              break;
              }
           
    
           }
           
           
          int ins(int a){
              
                if(a>10){
                printf("non ce piu spazio");
                 }
                 printf("inserisci gli studenti\n");
                 printf("nome\n");
                 gets((b[a].std).nome);
                 printf("cognome\n");
                 gets((b[a].std).cognome);
                 printf("data di nascita\n");
                 printf("giorno");
                 scanf("%d", &((b[a].std).d_t).giorno);
                 printf("\n mese");
                 scanf("%d", &((b[a].std).d_t).mese);
                 printf("\n anno");
                 scanf("%d", &((b[a].std).d_t).anno);
                 ptintf("\n indirizzo\n");
                 printf("via ");
                 gets(((b[a].std).ind).via);
                 printf("\n numero");
                 scanf("%d", &((b[a].std).ind).numero);
                 printf("\nCAP");
                 scanf("%d", &((b[a].std).ind).CAP);
                 printf("\nnazione");
                 gets(((b[a].std).ind).nazione);
                 printf("\ncittà");
                 gets(((b[a].std).ind).citta);
                 printf("\nprovincia");
                 gets(((b[a].std).ind).provincia);
                 printf("\n matricola\n");
                 scanf("%d", &(b[a].std).matricola);
                 
                 printf("inserire gli insegnanti");
                 printf("nome\n");
                 gets((b[a].ins).nome);
                 printf("cognome\n");
                 gets((b[a].ins).cognome);
                 printf("data di nascita\n");
                 printf("giorno");
                 scanf("%d", &((b[a].ins).d_t).giorno);
                 printf("\n mese");
                 scanf("%d", &((b[a].ins).d_t).mese);
                 printf("\n anno");
                 scanf("%d", &((b[a].ins).d_t).anno);
                 ptintf("\n indirizzo\n");
                 printf("via ");
                 gets(((b[a].ins).ind).via);
                 printf("\n numero");
                 scanf("%d", &((b[a].ins).ind).numero);
                 printf("\nCAP");
                 scanf("%d", &((b[a].ins).ind).CAP);
                 printf("\nnazione");
                 gets(((b[a].ins).ind).nazione);
                 printf("\ncittà");
                 gets(((b[a].ins).ind).citta);
                 printf("\nprovincia");
                 gets(((b[a].ins).ind).provincia);
                 printf("materia insegnata");
                 gets((b[a].ins).materia);
                 
                 printf("libri\n");
                 printf("titolo");
                 gets((b[a].lib).titolo);
                 printf("\n autore");
                 gets((b[a].lib).autore);
                 printf("\n editore");
                 gets((b[a].lib).editore);
                 printf("\n ISBN");
                 gets((b[a].lib).ISBN);
                 printf("\n anno di publicazione");
                 scanf("%d", &(b[a].lib).anno_publicazione);
                 a++;
                 return(a);
                 }
             
               void vis(struct corso *p){
              printf("studente %s", (p->std).nome);
              printf("insegnante %s",(p->ins).nome) ;
              printf("libro %s", (p->lib).titolo);
              }               
                   
            void vis_cor(void){
              int i;
              struct corso *ps = &b[0];
              for(i=0; i<ind;i++){
                       vis(ps++);
                       }
                       }
    ho fatto cosi pero ancora non lo compila.
    mi dice [Linker error] undefined reference to `ptintf'

    non so cosa significa.
    io uso dev-c++ per compilare.

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.