Problema su programma con uso di switch

di Anonimizzato10737 il
5 risposte
Ragazzi dove sbaglio??? il programma mi va sempre in loop e prima l'ho provato togliendo la scanf dopo la printf ed inserendo un while( (articolo = getchar() ) != EOF) con scarsi risultati...ecco il programma
#include <stdio.h>
#include <stdlib.h>

int main()
{
    //INSERIMENTO DI UN VETTORE CON I PREZZI DEI PRODOTTI
    double a[5]={2.98, 4.50, 9.98, 4.49, 6.87};
    int articolo; //VARIABILE PER LO SWICHT
    int a_tot=0, b_tot=0, c_tot=0, d_tot=0, e_tot=0; //CONTATORI
    
    printf("Inserisci il numero dell'articolo: ""\n");
    scanf("%d", &articolo);
    
    while (articolo != -1)
    {
        switch (articolo)
        {
            case '1':  //INCREMENTA IL CONTATORE UNO SE VIENE INSERITO 1
                a_tot++;
                break;
                
            case '2':
                b_tot++;
                break;
                
            case '3':
                c_tot++;
                break;
                
            case '4':
                d_tot++;
                break;
                
            case '5':
                e_tot++;
                break;
                
                //CASE NEL CASO VENGA INSERITO CARATTERE VUOTO O INVIO
            case ' ': case '\n':
                break;
                
                //IN TUTTI GLI ALTRI CASI
            default:
                printf("Numero articolo non valido, inseriscilo di nuovo\n");
                break;
        }
    }
    
    //CALCOLO DEI PEZZI VENDUTI E DEL GUADAGNO
    printf("Totale articoli n1 venduti: %d", a_tot);
    printf("Totale guadagno di articoli n1 venduti: %f", a_tot*a[0]);
    printf("Totale articoli n2 venduti: %d", b_tot);
    printf("Totale guadagno di articoli n2 venduti: %f", b_tot*a[1]);
    printf("Totale articoli n3 venduti: %d", c_tot);    
    printf("Totale guadagno di articoli n3 venduti: %f", c_tot*a[2]);
    printf("Totale articoli n4 venduti: %d", d_tot);
    printf("Totale guadagno di articoli n4 venduti: %f", d_tot*a[3]);
    printf("Totale articoli n5 venduti: %d", e_tot);
    printf("Totale guadagno di articoli n5 venduti: %f", e_tot*a[4]);
    
    
    
    return 0;
}
come compilatore uso XCODE

5 Risposte

  • #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        //INSERIMENTO DI UN VETTORE CON I PREZZI DEI PRODOTTI
        double a[5]={2.98, 4.50, 9.98, 4.49, 6.87};
        int articolo; //VARIABILE PER LO SWICHT
        int a_tot=0, b_tot=0, c_tot=0, d_tot=0, e_tot=0; //CONTATORI
     
        printf("Inserisci il numero dell'articolo: \n");
        scanf("%d",&articolo);
     
        while ( articolo != -1)
        {
            switch (articolo)
            {
                case 1:  //INCREMENTA IL CONTATORE UNO SE VIENE INSERITO 1
                    a_tot++;
                    break;
     
                case 2:
                    b_tot++;
                    break;
     
                case 3:
                    c_tot++;
                    break;
     
                case 4:
                    d_tot++;
                    break;
     
                case 5:
                    e_tot++;
                    break;
     
     
     
               //IN TUTTI GLI ALTRI CASI
                default:
                    printf("Numero articolo non valido, inseriscilo di nuovo");
                    break;
            }
             printf("Inserisci il numero dell'articolo: \n");
             scanf("%d",&articolo);
        }
     
    //CALCOLO DEI PEZZI VENDUTI E DEL GUADAGNO
        printf("Totale articoli n1 venduti: %d", a_tot);
        printf("Totale guadagno di articoli n1 venduti: %f", a_tot*a[0]);
        printf("Totale articoli n2 venduti: %d", b_tot);
        printf("Totale guadagno di articoli n2 venduti: %f", b_tot*a[1]);
        printf("Totale articoli n3 venduti: %d", c_tot);
        printf("Totale guadagno di articoli n3 venduti: %f", c_tot*a[2]);
        printf("Totale articoli n4 venduti: %d", d_tot);
        printf("Totale guadagno di articoli n4 venduti: %f", d_tot*a[3]);
        printf("Totale articoli n5 venduti: %d", e_tot);
        printf("Totale guadagno di articoli n5 venduti: %f", e_tot*a[4]);
     
     
     
        return 0;
    }
    così funziona va bene o lo potrei migliorare???
  • Puoi migliorarlo.
    Hai un array di 5 articoli e 5 diversi contatori. Perché non fai un array di 5 contatori?
    Ti risparmi uno switch e parecchie righe di codice.
    Poi al posto del while puoi mettere un do while richiedendo una sola volta il numero di articolo.

    E comunque nel tuo codice quando esci dal while?
  • shodan ha scritto:


    E comunque nel tuo codice quando esci dal while?
    esco quando inserisco l'EOF
    comunque il programma mi chiedeva espressamente di usare lo swicht...
  • Me ne sono accorto dopo.
    comunque il programma mi chiedeva espressamente di usare lo swicht...
    Questo però non lo avevi precisato.
    Ah, metti dei newline nelle printf o l'output è confuso.
  • Si scusa me n'ero dimenticato...
    grazie mille per l'aiuto
Devi accedere o registrarti per scrivere nel forum
5 risposte