Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2019
    Messaggi
    2

    [C] Ritorno a funzione main() in presenza di un ciclo

    Scusate non saprei dare un titolo più appropriato alla discussione.

    Ho in problema con la funzione che vi posto qui in basso (void inserisciDati(batteria[]), precisamente).

    codice:
    codice:
    #include <stdio.h>
    #include <string.h>
    #define V 20
    #define D 10
    #define O 8
    
    typedef struct {
        char nome [V];
        char cognome [V];
        int eta;
        float tempo;
        
    }atleta;
    
    typedef struct {
        atleta atleta[O];
        char sesso;
    }batteria;
    
    void inserisciDati(batteria[]);
    float mediaMaschile(batteria[]);
    int numeroFemmine(batteria[],float);
    
    
    int main() {
        batteria b[D];
        float media;
        int numf;
        
        printf("\n\nREGISTRAZIONI ATLETI:\n");
        inserisciDati(b);
        printf("\nFine Funzione\n");
        media=mediaMaschile(b);
        numf=numeroFemmine(b,media);
        printf("La media Maschile è di %f, le femmine che hanno fatto un tempo migliore sono %d",media,numf);
        
                
            
    }    
    
    void inserisciDati(batteria b[]){
        int i,j;
        
        for (i=0;i<D;i++){
            
            for(j=0;j<O && j!=-1;){
                if (j>0){
                    while (getchar() != '\n');
                    
                }
                printf("\nInserisci il nome dell'atleta: ");
                fgets(b[i].atleta[j].nome,V,stdin);
                
                if (strcmp(b[i].atleta[j].nome,"\n")==0){
                    printf("\nFine Inserimento Batteria.");
                    j=-1;
                }
                
                else{
                    printf("Inserisci il cognome dell'atleta: ");
                    fgets(b[i].atleta[j].cognome,V,stdin);
                    printf("Inserisci l'età dell atleta:");
                    scanf("%d",&b[i].atleta[j].eta);
                    if (j==0){
                        printf("Inserisci il sesso dell'atleta: (""m"" o ""f"")");
                        scanf(" %c",&b[i].sesso);
                    }
                    printf("Tempo registrato:");
                    scanf("%f",&b[i].atleta[j].tempo);
                    j++;
                }
            }
            
        }
        printf("\nFine Ciclo");
        return;
    }
    
    float mediaMaschile(batteria b[]){
        int i,j,count=0;
        float tot=0;
        float media;
        for (i=0;i<D;i++){
            if (b[i].sesso=='m'){
                for (j=0;j<O && b[i].atleta[j].nome!=NULL;){
                    tot=tot+b[i].atleta[j].tempo;
                    count++;
                }
            }
        }
        media=tot/(float)count;
        return media;
    }
    
    int numeroFemmine(batteria b[],float media){
        
        int i,j,num=0;
        for (i=0;i<D;i++){
            if (b[i].sesso=='f'){
                for (j=0;j<O && b[i].atleta[j].nome!=NULL;){
                    if (b[i].atleta[j].tempo<media){
                        num++;
                    }
                }
            }
        }
        return num;
    }

    Il problema è che il programma non da nè errori ne warning, ma alla fine del ciclo non ritorna nel main() e non mi compare più nulla sul terminale, ho provato di tutto ma non sono riuscito ad arrivare ad una conclusione.
    Ho già provato a piazzare fflush(stdin) e fflush(stdout) pensando fosse un problema di buffer.

  2. #2
    Questo for non ha molta speranza di finire, visto che j è uguale a 0 e nulla lo modifica

    codice:
    for (j=0; j<O && b[i].atleta[j].nome!=NULL; ){
          if (b[i].atleta[j].tempo<media){
          num++;
       }
    }
    Stesso discorso per quello subito sotto

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2019
    Messaggi
    2
    Grazie scimmiaparlante! Non riuscivo davvero a capire dov'era l'errore, dato che il programma sembrava che si bloccasse alla fine della funzione dato che non eseguiva nessuna printf dopo la funzione. Evidentemente il compilatore durante l'ottimizzazione del programma ha preferito prima eseguire i cicli successivi alla funzione (?)
    Starò più attento le prossime volte!
    Grazie ancora!

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.