Oppure

Loading
09/05/11 12:39
mycronapoli
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:

#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 09/05/11 16:42
aaa
09/05/11 15:45
pierotofy
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: piero.dev
09/05/11 15:54
mycronapoli
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
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... :(
aaa
09/05/11 16:27
jack92
Ciao , credo sia un problema di buffer. Tra un "scanf" e un "gets" ricordati di inserire sempre un "fflush(stdin);" ;)
aaa
09/05/11 16:40
mycronapoli
Siiii!!!:D:D:rotfl::rotfl::D:rotfl::D Grazie mille!!!!! Risolto!!!! :rotfl::rotfl::k:
aaa
09/05/11 16:41
mycronapoli
Siiii!!!:D:D:rotfl::rotfl::D:rotfl::D Grazie mille!!!!! Risolto!!!! :rotfl::rotfl::k:
aaa
09/05/11 17:10
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:

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


;)
aaa
09/05/11 17:27
jack92
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:

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 09/05/11 17:28
aaa