Funzione gets come non esistesse, c

di il
9 risposte

Funzione gets come non esistesse, c

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"); }

9 Risposte

  • Re: Funzione gets come non esistesse, c

  • Re: Funzione gets come non esistesse, c

    Appurato che il Dev è quello che è, proviamo anche a non scrivere codice che non ha senso ...

    Se scrivi
    
        int dim=0,n;
        
        Studenti a[dim];
    
    il vettore di strutture che hai chiamato a (ma non era meglio un nome più sensato?) avrà dimensione 0 ovvero non esisterà ...

    Non pensi sia sbagliato ?
  • Re: Funzione gets come non esistesse, c

    Grazie ad entrambi per le risposte... Oregon mi avevi fatto notare la cosa anche al programma di prima, non capisco... io lo faccio perché altrimenti dovrei dichiarare una struttura di grandi dimensioni, quando poi magari l'utente ne riempie solo due.. Guarda ad esempio qua:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    void solo_maiusc (char[]);
    
    main ()
    {
     	 
     	 
     	 char frase[50];
     	 printf ("inserisci la frase\n");
     	 gets( frase);
     	 solo_maiusc (frase);
     	 
    	  system ("PAUSE");
    	  return 0; } 
    
    void solo_maiusc (char frase[])
    {
     	 int n,dim=0,i;
     	 
     	 n=strlen(frase);
     	 printf("strlen restituisce %d", n);
     	 
     	 char nuova_frase[dim];
     	 
     	 for (i=0; i<= n; i++)
     	 {
     	 if (isupper(frase[i])==!0)
     	 {nuova_frase[dim]= frase[i];
     	 dim++;}}
     	 
     	 printf("_________________________\n");
     	 printf("I caratteri maiuscoli nella frase inserita sono:\n");
    	  
    	 for (i=0; i<= dim; i++)
    	 printf("%c ", nuova_frase[i]); }
    ho messo dim=0 e poi la faccio aumentare oni volta trov un ch maiuscolo. Poi lo faccio stampare fino a dim ovviamente(mi riferisco all'ultimo for); l'alternativa mi sembra dare a nuova frase una grande e inutilizzata dimensione...
    Considera tutto una domanda di un super principiante con il c, sicuramente hai molte più conoscenze di me in tema..
  • Re: Funzione gets come non esistesse, c

    l'alternativa mi sembra dare a nuova frase una grande e inutilizzata dimensione
    Purtroppo non è un'alternativa ma bensì la sola strada percorribile (a meno di non implementare sistemi di riallocazione).
  • Re: Funzione gets come non esistesse, c

    Ma questa cosa della dim=0 pare anche a te( candaluar) inutile?
  • Re: Funzione gets come non esistesse, c

    Ma questa cosa della dim=0 pare anche a te( candaluar) inutile?
    A me sembra fondamentale impostare una dimensione massima: se ci rifletti un attimo capirai e se non lo capisci almeno fidati e se infine non ti fidi delle risposte a questo punto non ha neanche senso postare delle domande sul forum!
  • Re: Funzione gets come non esistesse, c

    Ah non seguire quello che dici non lo faccio nè lo vedo possibile perchè non posso controbbattere nulla, la mia è semplicemente una domanda, ho visto che oregon non era più online, tu mi hai risposto e allora lo ho chiesto a te. Non capisco da dove hai dedotto la possibilità Che non mi fido di quello che rispodete..
  • Re: Funzione gets come non esistesse, c

    Perché te lo avevo già detto io ...
  • Re: Funzione gets come non esistesse, c

    Ho visto nOn eri più online, mi ha risposto candaluar e ho chiesto a lui. Tu mi hai lasciato con la domanda "non pensi sia sbagliato?", chiedevo una spiegazione in più, tutto qua
Devi accedere o registrarti per scrivere nel forum
9 risposte