Username: Password: oppure
C/C++ - [RISOLTO] Problema gets con ciclo for
Forum - C/C++ - [RISOLTO] Problema gets con ciclo for

Avatar
mycronapoli (Normal User)
Newbie


Messaggi: 17
Iscritto: 28/01/2011

Segnala al moderatore
Postato alle 14:39
Lunedì, 09/05/2011
Ragazzi ho bisogno di voi. La soluzione sarà di una banalità unica... solo che non riesco a venirne a capo. Allora ho questo programma che mi ordina in base al prezzo dei prodotti. Quindi nel main si inseriscono dei prodotti {nome, codice , prezzo}. Ora quando devo inserirli (ciclo for) mi fa inserire solo una volta il nome invece delle volte dettate dal ciclo. Qualcuno mi sa aiutare?!

Ecco il codice:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 3
  5.  
  6. struct prodotto { char nome[100];
  7.                       int codice;
  8.                       int prezzo;};
  9.     typedef struct prodotto Prodotto;
  10.  
  11. int main()
  12. {
  13.     int i;
  14.     Prodotto vettore[MAX];
  15.     for (i=0;i<MAX;i++)
  16.     {
  17.         printf("Nome:");
  18.         gets(vettore[i].nome);
  19.         printf("Codice:");
  20.         scanf("%d",&vettore[i].codice);
  21.         printf("Prezzo:");
  22.         scanf("%d", &vettore[i].prezzo);
  23.     }
  24.  
  25.     for (i=0;i<MAX;i++)
  26.     printf("%s , %d , %d\n",vettore[i].nome , vettore[i].codice , vettore[i].prezzo);
  27.     ord_per_ins(vettore,MAX);
  28.     for (i=0;i<MAX;i++)
  29.     printf("%s , %d , %d\n",vettore[i].nome , vettore[i].codice , vettore[i].prezzo);
  30.     return 0;
  31. }
  32.  
  33. void ord_per_ins(Prodotto vettore[], int n)
  34. {
  35.     int i,j;
  36.     Prodotto el_da_ins;
  37.     for (i=1; i<n; i++)
  38.     {
  39.         j=i-1;
  40.         el_da_ins=vettore[i];
  41.         while (j>=0 && el_da_ins.prezzo<vettore[j].prezzo)
  42.         {
  43.             vettore [j+1]=vettore[j];
  44.             j--;
  45.         }vettore [j+1]=el_da_ins;
  46.     }
  47. }


Ultima modifica effettuata da mycronapoli il 09/05/2011 alle 18:42
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:45
Lunedì, 09/05/2011
Giusto per curiosità... se rinonimi MAX in NUM_ELEMENTI_MAX cosa succede? Inoltre, come fai a sapere che è gets la causa del problema?


Il mio blog: https://piero.dev
PM Quote
Avatar
mycronapoli (Normal User)
Newbie


Messaggi: 17
Iscritto: 28/01/2011

Segnala al moderatore
Postato alle 17:54
Lunedì, 09/05/2011
Testo quotato

Postato originariamente da pierotofy:

Giusto per curiosità... se rinonimi MAX in NUM_ELEMENTI_MAX cosa succede?


In realtà niente, solo che ho una variabile definita con un numero elevato di lettere :D:D
Testo quotato

Postato originariamente da pierotofy:

Inoltre, come fai a sapere che è gets la causa del problema?


Penso che sia quello perchè se provo ad eseguirlo, mi fa inserire solo una volta il nome, quando ,invece, dovrebbe farlo 3 volte... :(

PM Quote
Avatar
jack92 (Member)
Pro


Messaggi: 100
Iscritto: 06/08/2010

Segnala al moderatore
Postato alle 18:27
Lunedì, 09/05/2011
Ciao , credo sia un problema di buffer. Tra un "scanf" e un "gets" ricordati di inserire sempre un "fflush(stdin);" ;)

PM Quote
Avatar
mycronapoli (Normal User)
Newbie


Messaggi: 17
Iscritto: 28/01/2011

Segnala al moderatore
Postato alle 18:40
Lunedì, 09/05/2011
Siiii!!!:D:D:rotfl::rotfl::D:rotfl::D Grazie mille!!!!! Risolto!!!! :rotfl::rotfl::k:

PM Quote
Avatar
mycronapoli (Normal User)
Newbie


Messaggi: 17
Iscritto: 28/01/2011

Segnala al moderatore
Postato alle 18:41
Lunedì, 09/05/2011
Siiii!!!:D:D:rotfl::rotfl::D:rotfl::D Grazie mille!!!!! Risolto!!!! :rotfl::rotfl::k:

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 19:10
Lunedì, 09/05/2011
Testo quotato

Postato originariamente da jack92:

Ciao , credo sia un problema di buffer. Tra un "scanf" e un "gets" ricordati di inserire sempre un "fflush(stdin);" ;)


noooo! se usi quella funzione passando quel parametro, l'effetto è indefinito

meglio questo:

Codice sorgente - presumibilmente C/C++

  1. while (getchar() != '\n');



;)

PM Quote
Avatar
jack92 (Member)
Pro


Messaggi: 100
Iscritto: 06/08/2010

Segnala al moderatore
Postato alle 19:27
Lunedì, 09/05/2011
Testo quotato

Postato originariamente da Pitagora:

Testo quotato

Postato originariamente da jack92:

Ciao , credo sia un problema di buffer. Tra un "scanf" e un "gets" ricordati di inserire sempre un "fflush(stdin);" ;)


noooo! se usi quella funzione passando quel parametro, l'effetto è indefinito

meglio questo:

Codice sorgente - presumibilmente C/C++

  1. while (getchar() != '\n');



;)


Scusa non ho capito cosa intendi per "effetto indefinito" :-? :-? , mi potresti fare un esempio usando quella while ?

Ultima modifica effettuata da jack92 il 09/05/2011 alle 19:28
PM Quote