Programma su struct

di il
37 risposte

Programma su struct

Salve a tutti, ho fatto questo semplice programma, dove l utente inserire "0" quando vuole terminare l operazione e "1" se vuole continuare, e mi sa che li che si impiccia , ecco il codice:

 :
main()
{
int n,i;
int num;
printf("quante offerte vuoi inserire?:");
scanf("%d",&n);
struct offerte fornitori[n];
for(i=0;i<n;i++){
                 printf("inserisci %d nome :",i);
                 scanf("%s",fornitori[i].nome);
                 
                 printf("inserisci %d offerta:",i);
                
                 scanf("%f",&fornitori[i].offerta);
                
                 printf("\n");
                 printf("inserisci 0 se vuoi terminare, 1 se continuare:");
                 scanf("%d",&num);
                 if(num==0){
                            i=n;
                            }
                            if(num==1)
                            printf("\n");
                 }
                float t;
int j;
// bubble sort
for (i = 1; i<n; i++) {
      for (j = 1; j < n; j++) {
         if (fornitori[j - 1].offerta>fornitori[j].offerta> 0) {
            t=fornitori[j - 1].offerta;
            fornitori[j - 1].offerta=fornitori[j].offerta;
            fornitori[j].offerta=t;
         }
      }
   }
 
 
 printf("l'offerta migliore e' di %s, ha offerto : %.2f euro\n",fornitori[0].nome,fornitori[0].offerta);





non ho messo la dichiarazione se no veniva troppo lungo, in pratica nell ultimo printf mi da un numero stranissimo, sapete dove ho sbagliato? anche se credo in quei due if nella struct 
grazie mille

37 Risposte

  • Re: Programma su struct

    Prima di tutto usa correttamente i tag code per il codice nel forum .... dovresti saperlo ...

    In secondo luogo quella if non ha senso ... (non vorrei chiederlo, ma il professore non ha spiegato neanche la if ?)

    E infine l'ordinamento non tiene conto di tutti i dati della struttura ma scambia solamente il valore dell'offerta ...
  • Re: Programma su struct

    oregon ha scritto:


    Prima di tutto usa correttamente i tag code per il codice nel forum .... dovresti saperlo ...

    In secondo luogo quella if non ha senso ... (non vorrei chiederlo, ma il professore non ha spiegato neanche la if ?)

    E infine l'ordinamento non tiene conto di tutti i dati della struttura ma scambia solamente il valore dell'offerta ...
    io avevo pensato che per uscire dal ciclo for mettevo che i= n cosi riponendo alla domanda del ciclo sarebbe stata falsa e quindi sarebbe uscito, l if certo che ce l ha spiegato

    il code non so come si mette, ho visto anche nel regolamento ma non c e nulla, mi ricordavo che si metteva
     ma ho sbagliato
    
    si , il bubble fa solo le offerte e non i nomi , ho corretto
    
    
    PS: ho usato il break ed ora funziona
  • Re: Programma su struct

    io avevo pensato che per uscire dal ciclo for mettevo che i= n
    Ma da quale ciclo for? Quando poni i=n non sei in nessun ciclo for ...
    l if certo che ce l ha spiegato
    E ti ha spiegato che puoi scrivere così?

    if (fornitori[j - 1].offerta > fornitori[j].offerta > 0)

    con due > nella if ??
    il code non so come si mette
    Usa il tasto Code del forum quando scrivi i post.
    si , il bubble fa solo le offerte e non i nomi , ho corretto
    Che vuoi dire? Cosa hai corretto? Hai compreso l'errore che ti ho indicato?
  • Re: Programma su struct

    oregon ha scritto:


    io avevo pensato che per uscire dal ciclo for mettevo che i= n
    Ma da quale ciclo for? Quando poni i=n non sei in nessun ciclo for ...
    l if certo che ce l ha spiegato
    E ti ha spiegato che puoi scrivere così?

    if (fornitori[j - 1].offerta > fornitori[j].offerta > 0)

    con due > nella if ??
    il code non so come si mette
    Usa il tasto Code del forum quando scrivi i post.
    si , il bubble fa solo le offerte e non i nomi , ho corretto
    Che vuoi dire? Cosa hai corretto? Hai compreso l'errore che ti ho indicato?

    si ho capito cosa vuoi dire, che nell output non mi dara il nome del fornitore con l offerta migliore bensi il primo che ho scritto nel cmd ; l if nel for l ho corretto mettendo il break invece di " i=n" ;
    ah vabbe, all if ho sbagliato io, avrei dovuto scrivere:
    if (fornitori[j - 1].offerta > fornitori[j].offerta ), giusto? comunque grazie dell aiuto
  • Re: Programma su struct

    non sapevo si potessero scrivere piu di un " >" in un if
    Ecco perché ti dicevo se il professore avesse spiegato le if ...

    Comunque, adesso hai risolto? Hai corretto il codice?
  • Re: Programma su struct

    oregon ha scritto:


    non sapevo si potessero scrivere piu di un " >" in un if
    Ecco perché ti dicevo se il professore avesse spiegato le if ...

    Comunque, adesso hai risolto? Hai corretto il codice?
    si ora ho risolto il codice, tranne per il fatto che se volessi stampare anche il nome non potrei,o almeno, ora come ora dovrei modificare qualcosa..poi un altra cosa e che se ci do dimensione "100" non so come stampare solo i numeri inseriti dall utente, per esempio, l utente da dimensione 100 max, poi inserisce 3 dati solo, pero mi stampa anche gli altri 97 tutti sballati, la ci devo lavorare ancora un po
  • Re: Programma su struct

    oregon ha scritto:


    non sapevo si potessero scrivere piu di un " >" in un if
    Ecco perché ti dicevo se il professore avesse spiegato le if ...

    Comunque, adesso hai risolto? Hai corretto il codice?
    ho fatto qualche modifica, ma ora continua a darmi errori , ecco il codice:
    main()
    {
    int n,i;
    int num;
    printf("quante offerte vuoi inserire?:");
    scanf("%d",&n);
    struct offerte fornitori[n];
    for(i=0;i<n;i++){
    printf("inserisci %d nome :",i);
    scanf("%s",fornitori.nome);

    printf("inserisci %d offerta:",i);

    scanf("%f",&fornitori.offerta);

    printf("\n");
    printf("inserisci 0 per terminare, 1 per continuare :");
    scanf("%d",&num);
    if(num==0){
    break;
    }

    }
    float t;
    int j;
    for (i = 1; i<n; i++) {
    for (j = 1; j < n; j++) {
    if (fornitori[j - 1].offerta>fornitori[j].offerta) {
    t=fornitori[j - 1].offerta;
    fornitori[j - 1].offerta=fornitori[j].offerta;
    fornitori[j].offerta=t;
    }
    }
    }

    printf("l'offerta migliore e' di %.2f euro\n",fornitori[0].offerta);

    mi da dei numeri strani se inserisco per esempio dimensione max 100 e metto 0 per terminare..secondo me quell if non va bene..
  • Re: Programma su struct

    BBCode
  • Re: Programma su struct

    vbextreme ha scritto:


    BBCode
    cos e il bbcode? non mi aiuta molto..
  • Re: Programma su struct

    A noi si!
  • Re: Programma su struct

    ILROLL ... finché non inserirai il tuo codice tra i due tag (tra il primo e il secondo ! )
    si farà fatica a risponderti ...

    Comunque ... se tu continui ad ordinare usando n come valore limite nelle for ovviamente ordinerà i 100 elementi. Se devi tenere traccia di quanti ne hai inseriti, all'uscita dell'inserimento devi memorizzare l'indice utilizzato e impiegarlo al posto di n ...
  • Re: Programma su struct

    oregon ha scritto:


    ILROLL ... finché non inserirai il tuo codice tra i due tag (tra il primo e il secondo ! )
    si farà fatica a risponderti ...

    Comunque ... se tu continui ad ordinare usando n come valore limite nelle for ovviamente ordinerà i 100 elementi. Se devi tenere traccia di quanti ne hai inseriti, all'uscita dell'inserimento devi memorizzare l'indice utilizzato e impiegarlo al posto di n ...
    non capisco cosa vuoi dire, quindi io al posto di n devo mettere l indice 'i' nel for?
  • Re: Programma su struct

    Eppure è semplice ... dove hai l'informazione che ci sono stati solo 3 input?
  • Re: Programma su struct

    oregon ha scritto:


    Eppure è semplice ... dove hai l'informazione che ci sono stati solo 3 input?

    se ci sono stati solo 3 input l informazione ce l ho sul primo , quindi a N-3 se incomincio a contare da i=0 , giusto?
Devi accedere o registrarti per scrivere nel forum
37 risposte