Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337

    [C] Strcut, codice con menu

    codice:
    #include <stdio.h>
    #include <conio.h>
    #define MAXCHAR 30
    #define MAXSTUDENTI 200
    
    
    // definizioni di tipi: mettiamole PRIMA del main
    
    typedef char stringa [MAXCHAR];
    
    typedef struct {
    		stringa via;
    		int numCivico;
    		} tIndirizzo;
    
    typedef struct {
    		stringa nome;
    		tIndirizzo indiriz;
    		int voto;
    		} tStudente;
    
    typedef struct {
    		tStudente elenco [MAXSTUDENTI];
    		int numEffettivoStudenti;
    		} tClasse;
    
    int main () {
    
    char carLetto;
    char inutile;
    int i;
    
    tClasse myClass;  // un'istanza del tipo tClasse!
    tStudente studLetto;  // per l'inserimento
    myClass.numEffettivoStudenti = 0;
    
    
    do  {
       printf ("*** MENU PRINCIPALE ***\n\n");
       printf ("scegli la tua opzione:\n");
       printf ("1: inserisci uno studente nella classe\n");
       printf ("2: visualizza tutta la listozza di studenti\n");
       printf ("3: svuota il listone\n");
       printf ("4: uscita\n\n");
    
    // filtro l'input
    do carLetto = getch(); while (carLetto < '1' || carLetto > '4');
    
    switch (carLetto) {
       case '1':
    	printf ("***INSERIMENTO DI UNO STUDENTE***\n\n");
    	printf ("inserisci il nome: ");
    	scanf ("%s", studLetto.nome);
    	printf ("inserisci la via: ");
    	scanf ("%s", studLetto.indiriz.via);
    	printf ("inserisci il num. civico: ");
    	scanf ("%d", &studLetto.indiriz.numCivico);
    	printf ("inserisci il voto: ");
    	scanf ("%d", &studLetto.voto);
    
    	myClass.elenco[myClass.numEffettivoStudenti]=studLetto;
    	myClass.numEffettivoStudenti++;
    	// nota bene: manca il test per vedere se e' gia' pieno, andrebbe aggiunto
    
    	printf ("\n\nPREMI UN TASTO PER CONTINUARE");
    	inutile = getch();  break;
    
    
       case '2':
    	printf ("***LISTA TOTALE GLOBALE DEGLI STUDENTI***\n\n");
    
    	if (myClass.numEffettivoStudenti == 0)
    	   printf ("La lista e' vuota!");
    
    	for (i=0; i<myClass.numEffettivoStudenti; i++) {
    
    	printf ("%d: %s abitante in via %s n. %d - voto %d\n",
    		i+1 ,
    		myClass.elenco[i].nome,
    		myClass.elenco[i].indiriz.via,
    		myClass.elenco[i].indiriz.numCivico,
    		myClass.elenco[i].voto	);
    
    	}
    
    	printf ("\n\nPREMI UN TASTO PER CONTINUARE");
    	inutile = getch(); break;
    
    
       case '3':
    	myClass.numEffettivoStudenti = 0;
    	printf ("Ho svuotato l'array");
    	printf ("\n\nPREMI UN TASTO PER CONTINUARE");
    	inutile = getch(); break;
    
    
       case '4': break;
    
       // impossibile raggiungere questo caso se il
       // filtro sull'input funziona
       default: printf ("errore, qualcosa non va"); break;
    
       } // fine switch
    
     } while (carLetto != '4');
    
    printf ("\naddio. buon proseguimento di lezione, amico!\n");
    }
    non mi è chiaro cosa faccia il soprastante codice qui
    codice:
    myClass.elenco[myClass.numEffettivoStudenti]=studLetto;
    	myClass.numEffettivoStudenti++;
    Qui
    codice:
    myClass.numEffettivoStudenti = 0;


    non ho ben capito come fa il codice a inserire i vari studenti nell'elengo, io avrei usato un for con indice i per l'inserimento, non capisco.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Perche' il for?

    Quella riga copia i dati della struttura temporanea di uno studente in uno degli elementi del vettorei di strutture studente ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    ma quando definisco un tipo, posso fare tipo1 = tipo

    se tipo1 è strutturato come tipo ?

    e anche se in tipo ho delle stringhe ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Sì ... puoi farlo ... e potevi farlo anche negli altri esempi, ma mi sembrava che tu dovessi trattare i campi singolarmente perche' specificato nell'esercizio ...

  5. #5
    puoi fare a = b se il tipo di a e' lo stesso di b o se a e b sono tipi convertibili (int, char ecc.)



    in questo caso



    elenco e' un array di studenti

    studLetto e' uno studente

    e questa riga di codice :
    codice:
    myClass.elenco[myClass.numEffettivoStudenti]=studLetto;
    assegna alla prima posizione libera lo studente appena creato
    e questa:
    codice:
    myClass.numEffettivoStudenti++;
    aumenta il numero degli studenti inseriti

  6. #6
    Originariamente inviato da oregon
    Sì ... puoi farlo ... e potevi farlo anche negli altri esempi, ma mi sembrava che tu dovessi trattare i campi singolarmente perche' specificato nell'esercizio ...
    ma in che senso se i tipi sono diversi si puo' fare un assegnamento

    mi fai un esempio plz? nn ho ben chiaro il concetto

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da duonovembre
    ma in che senso se i tipi sono diversi si puo' fare un assegnamento

    mi fai un esempio plz? nn ho ben chiaro il concetto
    No ... un attimo ... non parlo di tipi diversi ma di due variabili diverse

    v e v1

    di uno stesso tipo struttura ... almeno questo e' quello che, secondo me, {-_-} intendeva dire con

    tipo1 = tipo

    ( infatti, se rileggi, lui ha scritto: "se tipo1 è strutturato come tipo" )

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    si esatto è quello che intendo

    ad esempio

    codice:
    typedef struct {char nome_albero[30];
                          int anni;
                         char genere[300];
                         ...
                         ...
                         ...
                       }t_bosco;
    
    t_bosco foresta_nera[999999] ;
    la mia domanda era posso fare cose del tipo

    codice:
    t_bosco foresta_nera[9] = t_bosco foresta_nera[11] ;
    anche se nella struct ho una serie di "stirnghe" ?

    la risposta credo sia si

    in tal caso ho capito il codice.

    questo è un modo elegante, anche se io avrei fatto
    codice:
    for (i=0; i<99; i++){
    scanf ("%d", %fattore_1[i] )
    scanf ("%d", %fattore_2[i]  )
    }
    perche non sapevo si potessero fare assegnamenti fra tipi defini dall'utente

    ma potrei fare qualcosa del genere se non uso i tipi, ma solo struct, ovvero posso fare assegnamenti fra struct simili?

    non so se mi sono spiegato bene

    grazie

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da {-_-}
    si esatto è quello che intendo
    Ok

    ad esempio

    ...
    Sì, puoi farlo ...

    ma potrei fare qualcosa del genere se non uso i tipi, ma solo struct, ovvero posso fare assegnamenti fra struct simili?
    Le struct devono essere uguali non solo simili ...

    (per capirci, elementi di una stessa struttura ...)

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    avendo
    codice:
    struct t_bosco{char nome_albero[30];
                          int anni;
                         char genere[300];
                         ...
                         ...
                         ...
                       };
    
    struct t_bosco foresta_nera[999999] ;
    
    struct t_bosco foresta_nera[9] = struct t_bosco foresta_nera[17] ;
    posso farlo ?

    Grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.