mycronapoli (Normal User)
Newbie
Messaggi: 17
Iscritto: 28/01/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++ |
#include <stdio.h> #include <stdlib.h> #define MAX 3 struct prodotto { char nome[100]; int codice; int prezzo;}; typedef struct prodotto Prodotto; int main() { int i; Prodotto vettore[MAX]; for (i=0;i<MAX;i++) { printf("Nome:"); gets(vettore[i].nome); printf("Codice:"); scanf("%d",&vettore[i].codice); printf("Prezzo:"); scanf("%d", &vettore[i].prezzo); } for (i=0;i<MAX;i++) printf("%s , %d , %d\n",vettore[i].nome , vettore[i].codice , vettore[i].prezzo); ord_per_ins(vettore,MAX); for (i=0;i<MAX;i++) printf("%s , %d , %d\n",vettore[i].nome , vettore[i].codice , vettore[i].prezzo); return 0; } void ord_per_ins(Prodotto vettore[], int n) { int i,j; Prodotto el_da_ins; for (i=1; i<n; i++) { j=i-1; el_da_ins=vettore[i]; while (j>=0 && el_da_ins.prezzo<vettore[j].prezzo) { vettore [j+1]=vettore[j]; j--; }vettore [j+1]=el_da_ins; } }
|
Ultima modifica effettuata da mycronapoli il 09/05/2011 alle 18:42 |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Giusto per curiosità... se rinonimi MAX in NUM_ELEMENTI_MAX cosa succede? Inoltre, come fai a sapere che è gets la causa del problema?
|
|
mycronapoli (Normal User)
Newbie
Messaggi: 17
Iscritto: 28/01/2011
|
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
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... |
|
jack92 (Member)
Pro
Messaggi: 100
Iscritto: 06/08/2010
|
Ciao , credo sia un problema di buffer. Tra un "scanf" e un "gets" ricordati di inserire sempre un "fflush(stdin);"
|
|
mycronapoli (Normal User)
Newbie
Messaggi: 17
Iscritto: 28/01/2011
|
Siiii!!! Grazie mille!!!!! Risolto!!!!
|
|
mycronapoli (Normal User)
Newbie
Messaggi: 17
Iscritto: 28/01/2011
|
Siiii!!! Grazie mille!!!!! Risolto!!!!
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
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++ |
while (getchar() != '\n');
|
|
|
jack92 (Member)
Pro
Messaggi: 100
Iscritto: 06/08/2010
|
Postato originariamente da Pitagora:
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++ |
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 |
|