Problema con chiamata di funzione nello switch

di il
5 risposte

Problema con chiamata di funzione nello switch

Salve,nel programma che sto scrivendo l'obiettivo è di permettere di poter inserire i dati di uno studente,poi di poterli stampare e di poter effettuare una ricerca per nome. Il problema è che funziona tutto tranne quando l'utente nel menù inserisce il numero due,in quel caso la funzione ricerca non funziona non facendo inserire il nome dello studente che si vuole cercare. Come potrei risolvere?Grazie in anticipo! Questo è il codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
short int menu();
typedef struct{
    char nome[20];
    char cognome[20];
    char corso[20];
    short int eta;
} studente;

typedef struct{
    studente elementi[5];
    short int num_studenti;
} lista;

lista inserimento_lista();
void stampa_lista(lista L);
void ricercaf();


int main(){
    lista l;
    short int scelta;
    char ricerca[10];
    do{
        scelta= menu();
        switch(scelta){
            case 1:
                system("clear");
                printf("***INSERIMENTO STUDENTI***\n");
                l = inserimento_lista();
                printf("\n");
                break;
            case 2:
                system("clear");
                printf("***RICERCA STUDENTE***\n");
                ricercaf();
                break;
            case 3:
                system("clear");
                printf("***ELENCO STUDENTI***\n");
                stampa_lista(l);
                break;
            default:
                return 0;  
        }
    }while(scelta != 4);
}

void ricercaf(){
    lista ll;
    char temp[10];
    fflush(stdin);
    printf("INSERISCI IL NOME DELLO STUDENTE: ");
    fgets(temp,10,stdin);
    temp[strlen(temp)-1] = '\0';
    for (int i=0;i<ll.num_studenti;i++){
        if (strcmp(temp,ll.elementi[i].nome) == 0){
            printf("STUDENTE N.%d\n",i+1);
            printf("NOME: %s\n",ll.elementi[i].nome);
            printf("COGNOME: %s\n",ll.elementi[i].cognome);
            printf("CORSO: %s\n",ll.elementi[i].corso);
            printf("ETÀ: %d\n",ll.elementi[i].eta);
        }
    }
    puts(""); 
}

void stampa_lista(lista L){
    for(int i=0;i<L.num_studenti;i++){
        printf("STUDENTE N.%d\n",i+1);
        printf("NOME: %s\n",L.elementi[i].nome);
        printf("COGNOME: %s\n",L.elementi[i].cognome);
        printf("CORSO: %s\n",L.elementi[i].corso);
        printf("ETÀ: %d\n",L.elementi[i].eta);
    }
    puts("");    
}


lista inserimento_lista(){
        lista list;
        int n;
        printf("Quanti studenti vuoi inserire? ");
        scanf("%d",&list.num_studenti);
        puts("");
        fflush(stdin);
        for(int i=0;i<list.num_studenti;i++){
            printf("INSERISCI IL NOME: ");
            scanf("%s",&list.elementi[i].nome);
            printf("INSERISCI IL COGNOME: ");
            scanf("%s",&list.elementi[i].cognome);            
            printf("INSERISCI IL CORSO: ");
            scanf("%s",&list.elementi[i].corso);
            printf("INSERISCI L'ETÀ: ");
            scanf("%d",&list.elementi[i].eta);
            puts("");
        }
        fflush(stdin);
        return list;
}



short int menu(){
    int scelta;
    printf("***GESTIONE STUDENTI***\n");
    printf("[1] INSERISCI STUDENTE;\n");
    printf("[2] CERCA STUDENTE;\n");
    printf("[3] STAMPA LISTA STUDENTI;\n");
    printf("[4] ESCI!\n");
    do{
        printf("SCELTA: ");
        scanf("%d",&scelta);
        if(scelta<1 || scelta>4){
            printf("SCELTA NON VALIDA!\n");
        }
    }while(scelta<1 || scelta>4);
    return scelta;
}

5 Risposte

  • Re: Problema con chiamata di funzione nello switch

    Nella linea

    for (int i = 0; i<ll.num_studenti; i++) {

    la variabile ll non è mai stata inizializzata, quindi il valore di num_studenti non è corretto.

    Non dovrebbe neanche compilare ...
  • Re: Problema con chiamata di funzione nello switch

    E nella funzione menu, prima del return, svuota il buffer di input con

    while (getchar() != '\n');
  • Re: Problema con chiamata di funzione nello switch

    oregon ha scritto:


    E nella funzione menu, prima del return, svuota il buffer di input con

    while (getchar() != '\n');
    Svuotando il buffer mi fa inserire il nome da ricercare,ma una volta inserito non stampa i dati dello studente con quel nome,sarà un problema di acquisizione della stringa?O forse del confronto?
  • Re: Problema con chiamata di funzione nello switch

    Hai letto tutte le mie risposte?
  • Re: Problema con chiamata di funzione nello switch

    Ho risolto,comunque vorrei chiederti un consiglio. Se non fosse stato per la tua idea di pulire il buffer,non ci sarei mai arrivato. C'è un metodo per capire quando effettuare la pulizia o meno e in che porzione di codice inserirla?
Devi accedere o registrarti per scrivere nel forum
5 risposte