Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Problema con struct

    Salve a tutti. Ho un problema con le struct quando vado a stampare la data. Qualcuno mi può aiutare? Grazie a tutti anticipatamente

    CODICE :
    /*
    Usare le Struct;
    2 Struct: Alunni,Data
    Usare le funzioni: Inserimento,Modifica data e per cognome,Stampa,Ordinamento,Ricerca per data e per cognome
    */
    #include <stdio.h>
    #define MAX 100

    typedef struct{
    int giorno;
    int mese;
    int anno;
    }data;


    typedef struct{
    char cognome [25];
    char nome [25];
    data data_nascita;
    float media;
    }studente;

    // prototipi di funzione
    int selezione(int sel);
    void inserimento(studente vettstud[],int x);
    void stampa(studente vettstud[],int size);

    //il programma inizia dalla funzione main
    int main()
    {int sel,scelta,decisione,x,contr,size,i;
    contr=0;

    studente vettstud[MAX];
    printf("*** Benvenuto nel programma ***\n\n");
    printf("Inserisci il numero di studenti da prendere in considerazione (MAX 100) :");
    scanf("%d",&size);

    if(size > 100)
    {
    while(size > 100)
    {printf("\n\nInserisci il numero di studenti da prendere in considerazione (MAX 100) :");
    scanf("%d",&size);
    }
    }

    sel=selezione(scelta);

    while(contr==0)
    {

    switch (sel)
    {
    case 1:
    printf("\n\nQuanti studenti vuoi inserire? :");
    scanf("%d",&x);
    inserimento(vettstud,x);
    break;

    case 2:
    printf("\n\n*** Stampo gli studenti ***");
    stampa(vettstud,size);
    break;


    case 6:
    printf("Esco...");
    contr=1;
    break;

    default:
    printf("\nAttenzione! Valore inserito errato!\n");
    break;
    }
    sel=selezione(scelta);
    }

    system("CLS");
    system("PAUSE");
    //fine del programma
    }


    int selezione(int sel)
    {
    printf("\nProgramma studenti\n\n");
    printf("[1].Inserimento studenti\n[2].Stampa studenti\n[3].Ordinamento studenti\n[4].Modifica per data o cognome\n[5].Ricerca per data o per data o per congnome\n[6].Esci dal programma\n\nInserisci la tua scelta :");
    scanf("%d",&sel);
    return sel;
    }

    void inserimento(studente vettstud[],int x)
    { int i;
    for(i=0;i<x;i++)
    {
    printf("\nInserisci il cognome del %d studente :",i);
    scanf("%s",&vettstud[i].cognome);
    fflush(stdin);
    printf("\nInserisci il nome del %d studente :",i);
    scanf("%s",&vettstud[i].nome);
    fflush(stdin);
    printf("\nInserisci la data di nascita (gg-mm-aaaa) :");
    scanf("%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
    printf("\nInserisci la media del %d studente:",i);
    scanf("%f",&vettstud[i].media);
    printf("\n**********\n");
    }
    printf("\n\nInserimento completato! \n\n");
    printf("%d-%d-%d",&vettstud[0].data_nascita.giorno,&vettstud[0].data_nascita.mese,&vettstud[0].data_nascita.anno);
    }

    void stampa(studente vettstud[],int size)
    { int i;
    for (i=0;i<size;i++)
    {
    printf("\n\t%s",&vettstud[i].cognome);
    printf("\t\t\%s",&vettstud[i].nome);
    printf("\t\t\%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
    }
    printf("\n\n***Stampa completata!***\n\n");
    }

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Questa funzione:
    codice:
    void stampa(studente vettstud[],int size)
    { int i;
    for (i=0;i<size;i++)
    {
    printf("\n\t%s",&vettstud[i].cognome);
    printf("\t\t\%s",&vettstud[i].nome);
    printf("\t\t\%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
    }
    printf("\n\n***Stampa completata!***\n\n");
    }
    Io la trovo corretta, il problema potrebbe essere in altre funzioni.
    Che problema ti da in particolare? Se c'è un errore fai copia e incolla.
    PS: hai dimenticato i tag code.

  3. #3
    Originariamente inviato da ramy89
    Questa funzione:
    codice:
    void stampa(studente vettstud[],int size)
    { int i;
    for (i=0;i<size;i++)
    {
    printf("\n\t%s",&vettstud[i].cognome);
    printf("\t\t\%s",&vettstud[i].nome);
    printf("\t\t\%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
    }
    printf("\n\n***Stampa completata!***\n\n");
    }
    Io la trovo corretta, il problema potrebbe essere in altre funzioni.
    Che problema ti da in particolare? Se c'è un errore fai copia e incolla.
    PS: hai dimenticato i tag code.
    Quando mettevo il tag code mi usciva tutto il codice su una riga . Comunque niente errori. Cosa può essere?

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Hai detto che c'è un problema con le struct quando vai a stampare le date.Qual' è questo problema? output indesiderato? Cosa ti stampa?

  5. #5
    Originariamente inviato da ramy89
    Hai detto che c'è un problema con le struct quando vai a stampare le date.Qual' è questo problema? output indesiderato? Cosa ti stampa?
    Si. Output indesiderato. Mi stampa dei numeri molto alti che non centrano con la data.

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Adesso non so se potrebbe esserci un altro problema, ma nella inserisci:
    codice:
    void inserimento(studente vettstud[],int x)
    { int i;
    for(i=0;i<x;i++)
    {
    printf("\nInserisci il cognome del %d studente :",i);
    scanf("%s",&vettstud[i].cognome);
    fflush(stdin);
    printf("\nInserisci il nome del %d studente :",i);
    scanf("%s",&vettstud[i].nome);
    fflush(stdin);
    printf("\nInserisci la data di nascita (gg-mm-aaaa) :");
    scanf("%d-%d-%d",&vettstud[i].data_nascita.giorno,&vettstud[i].data_nascita.mese,&vettstud[i].data_nascita.anno);
    printf("\nInserisci la media del %d studente:",i);
    scanf("%f",&vettstud[i].media);
    printf("\n**********\n");
    }
    printf("\n\nInserimento completato! \n\n");
    printf("%d-%d-%d",&vettstud[0].data_nascita.giorno,&vettstud[0].data_nascita.mese,&vettstud[0].data_nascita.anno);
    }
    Pulisci lo stdin 2 volte ma usi 4 scanf.Prova a usare fflush dopo ogni scanf, il problema potrebbe essere che rimane il carattere '\n' a sporcare il buffer, che viene quindi letto al posto dell' input che digiti.

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.