Ho fatto questo programma che carica dei dati da tastiera nella struct. Ne ho fatto uno simile con l'unica differenza che la dimensione della struct è decisa all'inizio (senza tutto il passaggio di inserire "stop" al termine..) e lì è tutto ok. Qui invece non capisco perché non rileva né il gets né il puts dentro la prima funzione, nell'output fa due righe di vuoto... Ne approffitto per chiedervi se il dare come valore di ritorno alla prima funzione la i (per poi passarla come dimensione della struct alla seconda funzione) ha senso. Grazie
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct STUDENTI { char nome[20]; int matricola; int votomedio;};
typedef struct STUDENTI Studenti;
int carica_struct (Studenti []);
void cerca_per_nome (Studenti[], int);
main()
{
printf("%47s", "***STUDENTI***\n");
printf("_________________________________\n\n");
int dim=0,n;
Studenti a[dim];
carica_struct (a);
n= carica_struct (a);
cerca_per_nome (a, n);
system ("PAUSE");
return 0;
}
int carica_struct (Studenti x[])
{
printf("inserisci nome, num. matricola, voto medio");
int i=0;
char parola[5];
do{
printf("\n? ? ?\n");
scanf ("%s %d %d", x[i].nome, & x[i].matricola, & x[i].votomedio);
i++;
printf("digita stop per terminare l'inserimento, altrimenti altro :");
gets(parola);
puts(parola); }
while (strcmp (parola,"stop") != 0);
return i;
}
void cerca_per_nome ( Studenti x[], int n)
{
char nome[20];
int i, trovato=0;
printf("inserisci il nome dello studente, restituiro' matricola e voto medio\n\n");
scanf("%s", nome);
for (i=0; i<=n && trovato==0; i++)
{
if( strcmp (nome, x[i].nome)==0)
{
trovato=1;
printf( "NUMERO MATRICOLA:%d\nVOTO MEDIO:%d\n", x[i].matricola, x[i].votomedio); } }
if (trovato==0)
printf("\nil nome inserito non e' stato trovato\n"); }