Gia',hai ragione.
Ho riscritto il codice completo cosi':
codice:
#include<stdio.h>
#include<string.h>
typedef struct
{
char nome[31],cognome[31];
float inglese,fisica,matematica;
}studente;
main()
{
char l[31],s[31];
studente classe[100];
int m,i,n,k;
printf("Quanti studenti ci sono? ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Studente %d:\n",(i+1));
printf("Nome: ");
scanf("%s",classe[i].nome);
printf("Cognome: ");
scanf("%s",classe[i].cognome);
printf("Voto inglese? ");
scanf("%f",&classe[i].inglese);
printf("Voto fisica? ");
scanf("%f",&classe[i].fisica);
printf("Voto matematica? ");
scanf("%f",&classe[i].matematica);
}
do
{
if(k>0)
printf("\nDigita cognome studente o esci per terminare: ");
gets(l);
for(i=0;i<n;i++)
{
if(strcmp(l,classe[i].cognome)==0)
{
printf("%s %s",classe[i].nome,classe[i].cognome);
printf(",media voti: %.1f\t",(classe[i].inglese+classe[i].matematica+classe[i].fisica)/3);
}
}
k++;
}while((strcmp(l,"esci"))!=0);
return 0;
}
Cosi' funziona,ma ho ancora un dubbio.
Focalizzate la vostra attenzione su questa parte del codice:
codice:
if(k>0)
printf("\nDigita cognome studente o esci per terminare: ");
gets(l);
for(i=0;i<n;i++)
{
if(strcmp(l,classe[i].cognome)==0)
{
printf("%s %s",classe[i].nome,classe[i].cognome);
printf(",media voti: %.1f\t",(classe[i].inglese+classe[i].matematica+classe[i].fisica)/3);
}
}
k++;
La variabile k l' avevo inizializzata a zero per un semplice motivo:forse per un bug del compilatore (o sono io che sbaglio qualcosa? ),se non metto la condizione di stampare "Digita cognome studente o esci per terminare" solo quando k e' maggiore di 0 (quindi me lo stampa dalla seconda volta in poi),me lo stampa due volte e poi mi chiede di inserire l (con la gets).
L' ho "corretto" specificando di non stamparmi "Digita cognome studente o esci per terminare" la prima volta,ma di saltarlo.
Pero' non so bene perche' fa cosi',ma in teoria non dovrebbe chiedermi subito di inserire l gia' dalla prima volta?