Problema in C, programma voto

di il
31 risposte

Problema in C, programma voto

Salve! Non riesco a capire perché il programma non va, ho provato a cercare in giro, ma non riesco a trovare nulla. L'esercizio per i più esperti è banalissimo, ma per persone come me che hanno appena iniziato è abbastanza difficile.
Il codice:
#include <stdio.h>
#include <string.h>

struct studenti{
	char nome[30];
	float voto;
};

struct studenti studente[100];

int i=0,a=0,c=0;
float max,min=9999999,media=0;
char stop[]="Stop";


void stampa();

int main(){
	printf("\n\t\t\t\t\tBenvenuto!\n\n");
	printf("Questo programma calcola il voto massimo, minimo e medio di un certo numero di studenti");
	printf("\nPer fermare il programma digitare 'Stop' alla richiesta del nome");
	do{
		printf("\nInserire NOME e COGNOME dello studente: ");
		scanf("%s", &studente[i].nome);
		if(strcmp (stop,studente[i].nome) == 0){
			stampa();
		}
		printf("Inserisci voto: ");
		scanf("%f", &studente[i].voto);
		if(studente[i].voto > max) {
            max = studente[i].voto;
            }
        if(studente[i].voto < min){
            min = studente[i].voto;
            }
        i++;
        media=media+studente[i].voto;
        c++;
    	}while(a=0);
    	return 0;

}



void stampa(){
	for(int b=0; b<i; b++){
		printf("\nNome studente: %s Voto: %f",studente[b].nome,studente[b].voto);
		printf("Voto massimo: %.2f", max);
		printf("Voto minimo: %.2f", min);
		media=media/c;
		printf("Voto medio: %.2f", media);
		break;
	}
	
}
Esercizio:
Algoritmo riceve in input: Nomee Cognome e Voto. Calcola la media dei voti, il voto massimo e il voto minimo. Stop, per interrompere l'immissione dei dati. Creare una struttura per memorizzare il nome e il voto di ciascuna persona. Alla fine, a richiesta dell’utente, il programma stampa i seguenti dati: Nome, Voto , la media, il voto max e il voto min.


Grazie!

31 Risposte

  • Re: Problema in C, programma voto

    Quando posti un problema devi indicare un titolo adeguato per far capire e spiegarlo ... cosa dovrebbe fare, cosa invece succede ed eventuali errori.
  • Re: Problema in C, programma voto

    oregon ha scritto:


    Quando posti un problema devi indicare un titolo adeguato per far capire e spiegarlo ... cosa dovrebbe fare, cosa invece succede ed eventuali errori.
    Scusami, non mi ero accorto, grazie
  • Re: Problema in C, programma voto

    E quindi ??? Non hai spiegato nulla ... Cosa succede al tuo programma?
  • Re: Problema in C, programma voto

    Dove aver digitato il nome, il programma stampa "Inserisci voto" e si conclude, non riesco a capire perchè esso salta tutti i passaggi.
  • Re: Problema in C, programma voto

    Se si conclude allora dovresti controllare il ciclo, semplice. Controlla il do..while
  • Re: Problema in C, programma voto

    A me sembra tutto giusto, anche se di sicuro è sbagliato. Poi, perchè se scrivo tipo il nome e cognome con lo spazio in mezzo mi salta l'inserimento del voto, e se scrivo un singolo nome me l'ho chiede? Ecco alcune immagini:
    https://i.gyazo.com/9ddf6fcf187d915497553102c5be6289.png
    https://i.gyazo.com/7f75778f37bf97f3fdec067835f193cf.png
  • Re: Problema in C, programma voto

    La scanf non ammette spazi ... prova ad utilizzare la fgets per gli spazi

    Per il ciclo, ripeto, controlla do e while (non lo hai fatto)
  • Re: Problema in C, programma voto

    oregon ha scritto:


    La scanf non ammette spazi ... prova ad utilizzare la fgets per gli spazi

    Per il ciclo, ripeto, controlla do e while (non lo hai fatto)
    Nel do while ho corretto l'errore, che era l'unico uguale nel while(a=0) che dovrebbe essere ==. Il programma funziona, ma ora mi stampa il risultato con tanti zero dietro, anche se c'è scritto %.2f per abbreviarlo. FGETS mi è nuovo, sono riuscito a fare questo, ma non ho la più pallida idea di come funzioni. Ho cercato su internet ma nessuno lo spiega bene.
    #include <stdio.h>
    #include <string.h>
    
    struct studenti{
    	char nome[30];
    	float voto;
    };
    
    struct studenti studente[64];
    
    int i=0,a=0,c=0;
    float max,min=9999999,media=0;
    char stop[]="Stop";
    
    
    void stampa();
    
    int main(){
    	printf("\n\t\t\t\t\tBenvenuto!\n\n");
    	printf("Questo programma calcola il voto massimo, minimo e medio di un certo numero di studenti");
    	printf("\nPer fermare il programma digitare 'Stop' alla richiesta del nome");
    	do{
    		printf("\nInserire NOME e COGNOME dello studente: ");
    		fgets(studente[i].nome, 64, stdin);
    		if(strcmp (stop,studente[i].nome) == 0){
    			stampa();
    			return 0;
    		}
    		printf("Inserisci voto: ");
    		scanf("%f", &studente[i].voto);
    		if(studente[i].voto > max) {
                max = studente[i].voto;
                }
            if(studente[i].voto < min){
                min = studente[i].voto;
                }
            i++;
            media=media+studente[i].voto;
            c++;
        	}while(a==0);
    
    }
    
    
    
    void stampa(){
    	for(int b=0; b<i; b++){
    		printf("\nNome studente: %s Voto: %f",studente[b].nome,studente[b].voto);
    		printf("Voto massimo: %.2f", max);
    		printf("Voto minimo: %.2f", min);
    		media=media/c;
    		printf("Voto medio: %.2f", media);
    		break;
    	}
    	
    }
  • Re: Problema in C, programma voto

    Non hai usato %.2f ovunque ... fai attenzione ...
  • Re: Problema in C, programma voto

    oregon ha scritto:


    Non hai usato %.2f ovunque ... fai attenzione ...
    AH SI VERO, GRAZIE! Ma non riesco a capire perchè il programma fa così: https://i.gyazo.com/6030ffa8274a8a46f5c2343d0acf8a5a.png
    fgets è palesemente copiato da un tutorial su internet, e non sapevo come usarlo. Ah domanda, in c++ è necessario l'utilizzo del fgets? Grazie
  • Re: Problema in C, programma voto

    E' il solito problema del buffer di input dello scanf. Se n'è parlato tantissime volte in questo forum ...

    Anche della fgets si è parlato in altri thread, anche recenti ...

    Fai delle ricerche nel forum ogni tanto ...
  • Re: Problema in C, programma voto

    maxilrosso ha scritto:


    @oregon non può essere anche questo?
    No ... non c'entra nulla ... quelle scritture sono equivalenti. E' quello che ti ho detto.
  • Re: Problema in C, programma voto

    maxilrosso ha scritto:


    prova a mettere
    
    &(studente[i]).voto
    
    al posto di
    
    &studente[i].voto
    


    @oregon non può essere anche questo?

    non va purtroppo, grazie dell'aiuto
  • Re: Problema in C, programma voto

    justin99 ha scritto:


    non va purtroppo, grazie dell'aiuto
    Beh alla faccia della fiducia... Uno risponde con la soluzione tu provi il suggerimento successivo sbagliato.

    Ma chi me lo fa fare a rispondere?
Devi accedere o registrarti per scrivere nel forum
31 risposte