Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29

    [C] Cancellare un elemento da una struttura dati

    Ciao a tutti! ho riscontrato un problema nello scrivere una funzione che permette di cancellare un elemento scelto da utente nella struttura, qualcuno riesce ad aiutarmi?
    Vi posto il codice completo(il problema credo che si trovi nella funzione Cancella_studente):
    codice:
    #include <stdio.h>#include <string.h>
    #include <stdlib.h>
    typedef struct {
        char nome[20];
        char cognome[30];
        char paese[30];
        char nazionalita[30];
        int matricola;
        int voto_programmazione;
        int voto_analisi;
        int voto_algebra;
        int voto_algoritmi;
        int voto_architetture;
    }studente;
    
    
    int aggiungi_studente (studente *stud, int n)
    {
        printf("Inserisci nome studente %d: ", n+1);
        scanf("%20s", &stud[n].nome);
        printf("Inserisci cognome studente %d: ", n+1);
        scanf("%30s", &stud[n].cognome);
        printf("Inserisci paese studente %d: ", n+1);
        scanf("%30s", &stud[n].paese);
        printf("Inserisci nazionalita\' studente %d: ", n+1);
        scanf("%30s", &stud[n].nazionalita);
        printf("Inserisci matricola studente %d: ", n+1);
        scanf("%d", &stud[n].matricola);
        do{
            printf("Inserisci voto di programmazione dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
            scanf("%d", &stud[n].voto_programmazione);
        } while(stud[n].voto_programmazione<18 || stud[n].voto_programmazione>31 );
        do{
            printf("Inserisci voto di analisi matematica dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
            scanf("%d", &stud[n].voto_analisi);
        } while(stud[n].voto_analisi<18 || stud[n].voto_analisi>31 );
        do{
            printf("Inserisci voto di algebra e geometria dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
            scanf("%d", &stud[n].voto_algebra);
        } while(stud[n].voto_algebra<18 || stud[n].voto_algebra>31 );
        do{
            printf("Inserisci voto di algoritmi e strutture dati dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
            scanf("%d", &stud[n].voto_algoritmi);
        } while(stud[n].voto_algoritmi<18 || stud[n].voto_algoritmi>31 );
        do{
            printf("Inserisci voto di architetture degli elaboratori dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
            scanf("%d", &stud[n].voto_architetture);
        } while(stud[n].voto_architetture<18 || stud[n].voto_architetture>31 );
        return 1;
    }
    
    
    void visualizza_studenti (studente *stud,int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("\n\nStudente %d:",i+1);
            printf("\nNome: %s",stud[i].nome);
            printf("\nCognome: %s",stud[i].cognome);
            printf("\nPaese: %s",stud[i].paese);
            printf("\nNazionalita\': %s",stud[i].nazionalita);
            printf("\nMatricola: %d",stud[i].matricola);
            if(stud[i].voto_programmazione==31)
                printf("\nL\' esame di programmazione non \212 ancora stato superato!");
            else
                printf("\nVoto programmazione: %d",stud[i].voto_programmazione);
            if(stud[i].voto_analisi==31)
                printf("\nL\' esame di analisi matematica non \212 ancora stato superato!");
            else
                printf("\nVoto analisi matematica: %d",stud[i].voto_analisi);
            if(stud[i].voto_algebra==31)
                printf("\nL\' esame di algebra e geometria non \212 ancora stato superato!");
            else
                printf("\nVoto algebra e geometria: %d",stud[i].voto_algebra);
            if(stud[i].voto_algoritmi==31)
                printf("\nL\' esame di algoritmi e strutture dati non \212 ancora stato superato!");
            else
                printf("\nVoto algoritmi e strutture dati: %d",stud[i].voto_algoritmi);
            if(stud[i].voto_architetture==31)
                printf("\nL\' esame di architetture degli elaboratori non \212 ancora stato superato!");
            else
                printf("\nVoto architetture degli elaboratori: %d",stud[i].voto_architetture);
        }
    }
    int cancella_studente (studente *stud,int n)
    {
        int i, x;
        printf("Quale studente si vuole cancellare dall\'archivio?");
        scanf("%d",&x);
        for(i=x-1;i<n;i++)
        {
            strcpy(stud[i].nome,stud[i+1].nome);
            strcpy(stud[i].cognome,stud[i+1].cognome);
            strcpy(stud[i].paese,stud[i+1].paese);
            strcpy(stud[i].nazionalita,stud[i+1].nazionalita);
            stud[i].matricola==stud[i+1].matricola;
            stud[i].voto_programmazione==stud[i+1].voto_programmazione;
            stud[i].voto_analisi==stud[i+1].voto_analisi;
            stud[i].voto_algebra==stud[i+1].voto_algebra;
            stud[i].voto_algoritmi==stud[i+1].voto_algoritmi;
            stud[i].voto_architetture==stud[i+1].voto_architetture;
        }
        n--;
        return n;
    }
    
    
    void ricerca_studente (studente *stud,int n)
    {
        int mat, i;
        printf("Inserire la matricola dello studente da cercare: ");
        scanf("%d",&mat);
        for(i=0;i<n;i++)
            if(stud[i].matricola==mat)
            {
                printf("Lo studente cercato \212 in posizione %d.",i+1);
                printf("I voti dello studente %s %s sono: ",stud[i].nome,stud[i].cognome);
                if(stud[i].voto_programmazione==31)
                    printf("\nL\' esame di programmazione non \212 ancora stato superato!");
                else
                    printf("\nVoto programmazione: %d",stud[i].voto_programmazione);
                if(stud[i].voto_analisi==31)
                    printf("\nL\' esame di analisi matematica non \212 ancora stato superato!");
                else
                    printf("\nVoto analisi matematica: %d",stud[i].voto_analisi);
                if(stud[i].voto_algebra==31)
                    printf("\nL\' esame di algebra e geometria non \212 ancora stato superato!");
                else
                    printf("\nVoto algebra e geometria: %d",stud[i].voto_algebra);
                if(stud[i].voto_algoritmi==31)
                    printf("\nL\' esame di algoritmi e strutture dati non \212 ancora stato superato!");
                else
                    printf("\nVoto algoritmi e strutture dati: %d",stud[i].voto_algoritmi);
                if(stud[i].voto_architetture==31)
                    printf("\nL\' esame di architetture degli elaboratori non \212 ancora stato superato!");
                else
                    printf("\nVoto architetture degli elaboratori: %d",stud[i].voto_architetture);
                    return;
            }
        printf("Non esiste nessuno studente in archivio corrispondente alla matricola inserita!");
        return ;
    }
    void ricerca_esame (studente *stud, int n)
    {
        int i,cod;
        printf("Cod 1=Programmazione\nCod2=Analisi matematica\nCod3=Algoritmi e strutture dati\nCod 4=Algebra e geometria\nCod 5=Architetture degli elaboratori\n");
         do{
             printf("Inserisci il codice corrispondente all'esame da cercare: ");
        scanf("%d",&cod);
         }while(cod<1 || cod>5);
         
        
        if (cod==1)
        {
            printf("Lista degli studenti che non hanno sostenuto l'esame di programmazione");
            for(i=0;i<n;i++)
                if(stud[i].voto_programmazione==31)
                    printf("%s %s",stud[i].nome,stud[i].cognome);
        }
        if (cod==2)
        {
            printf("Lista degli studenti che non hanno sostenuto l'esame di analisi matematica");
            for(i=0;i<n;i++)
                if(stud[i].voto_analisi==31)
                    printf("%s %s",stud[i].nome,stud[i].cognome);
        }
        if (cod==3)
        {
            printf("Lista degli studenti che non hanno sostenuto l'esame di algoritmi e strutture dati");
            for(i=0;i<n;i++)
                if(stud[i].voto_algoritmi==31)
                    printf("%s %s",stud[i].nome,stud[i].cognome);
        }
        if (cod==4)
        {
            printf("Lista degli studenti che non hanno sostenuto l'esame di algebra e geometria");
            for(i=0;i<n;i++)
                if(stud[i].voto_algebra==31)
                    printf("%s %s",stud[i].nome,stud[i].cognome);
        }
        if (cod==5)
        {
            printf("Lista degli studenti che non hanno sostenuto l'esame di architetture degli elaboratori");
            for(i=0;i<n;i++)
                if(stud[i].voto_architetture==31)
                    printf("%s %s",stud[i].nome,stud[i].cognome);
        }
    }
    void main()
    {
        studente *stud;
        int n=0, cod;
        printf("Cod 1: Aggiungi studente.\nCod 2: Visualizza studente.\nCod 3: Cancella studente.\nCod 4: Ricerca studente per matricola.\nCod 5: Ricerca studenti che non hanno dato un esame inserito.\n");
        do{
        printf("Inserisci il codice corrispondente alla funziuone da eseguire: \n");
        scanf("%d",&cod);    
        }while(cod<=0 || cod>9);
        stud=(studente*)malloc(1*sizeof(studente));
        if(stud==NULL)
        {            
            printf("Allocazione non riuscita!");
            return;
        }
        do{
        switch (cod)
            {
                case 1: if (aggiungi_studente(stud,n)==1)
                            n++;
                        stud=(studente*)realloc(stud,(n+1));
                        if(stud==NULL)
                            {
                                printf("Allocazione non riuscita!");
                                return;
                            }
                        break;
                case 2: visualizza_studenti (stud,n);
                        break;
                case 3: cancella_studente(stud,n);
                        break;
                case 4: ricerca_studente (stud,n);
                        break;
                case 5: ricerca_esame (stud,n);
                        break;
            }
            do{
                printf("\nInserisci un altro codice (per uscire inserire 0): \n");
                scanf("%d",&cod);    
            }while(cod<0 || cod>9);
        }while(cod!=0);
        
        return;
    }

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    == è diverso da =
    stud[i].matricola==stud[i+1].matricola;
    Tecnologia

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29
    Ah se sono dura grazie mille!!

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.