PDA

View Full Version : [C] PROBLEMA CON SWITCH


Alex_G
30-05-2013, 11:39
Ciao a tutti, sto provando a scrivere questo programma per calcolare la paga di diversi dipendenti utilizzando il comando switch; eseguendo il programma nonostante io immetta un carattere incluso nei casi dello switch, si verifica l'azione di default... :cry: cosa è sbagliato secondo voi ? Grazie in anticipo :)

int codice, paga_fissa=500, stipendio_ora=6, stipendio_ora_straordinario=9, paga_lavoratori_privvigione = 250, stipendio_fisso_articolo=5, articoli_prodotti;
float stipendio_dipendente, ore_lavorative, ore_bonus, paga_straordinari, vendite_lorde, bonus_dipendente_a_prov;

printf("Inserire la lettera corrispondente al dipendente del quale si vuole calcolare lo stipendio, seguendo la seguente tabella:\na: manager\nb: lavoratori a ore\nc:lavoratori a provvigione\nd:lavoratori a cottimo\nEOF: per terminare il programma;\n");
scanf("%d", &codice);

while (( codice = getchar() ) != EOF) {

switch ( codice ) {
case 'a':
stipendio_dipendente = paga_fissa;
printf("Lo stipendio ammonta ad una cifra di %.2f euro\n", stipendio_dipendente);
break;

case 'b':
printf("Inserire il numero di ore di lavoro effettuate:\n");
scanf("%f", &ore_lavorative);

if ( ore_lavorative<=40) {
stipendio_dipendente = ore_lavorative*stipendio_ora;
printf("Lo stipendio ammonta ad una cifra di %.2f euro\n", stipendio_dipendente);
}
else {
ore_bonus = ore_lavorative -40;
paga_straordinari = ore_bonus*stipendio_ora_straordinario;
stipendio_dipendente = 40*stipendio_ora + paga_straordinari;
printf("Lo stipendio ammonta ad una cifra di %.2f euro\n", stipendio_dipendente);
}


break;

case 'c':
printf("Inserire l'ammmontare in euro delle vendite lorde del dipendente:\n");
scanf("%f", &vendite_lorde);

bonus_dipendente_a_prov = (vendite_lorde/100)*5.7;
stipendio_dipendente = bonus_dipendente_a_prov + paga_lavoratori_privvigione;

printf("Lo stipendio ammonta ad una cifra di %.2f euro\n", stipendio_dipendente);
break;


case 'd':
printf("Inserire il numero di articoli prodotti:\n");
scanf("%d", &articoli_prodotti);

stipendio_dipendente = articoli_prodotti*stipendio_fisso_articolo;

printf("Lo stipendio ammonta ad una cifra di %.2f euro\n", stipendio_dipendente);
break;


default:
printf("E' stato inserito un numero di identificazione non corretto. Inserire nuovamente il numero per identificare il dipendente");
break; :doh:


}
}
return 0;

lorenzo001
30-05-2013, 19:32
Se è un carattere

scanf("%c", &codice);

e non

scanf("%d", &codice);

Alex_G
31-05-2013, 00:55
Se è un carattere

scanf("%c", &codice);

e non

scanf("%d", &codice);

Ho provato ma continua a darmi il messaggio di default... S: non so che fare...

[Kendall]
31-05-2013, 08:48
Come mai hai inserito quelle due operazioni di lettura una dietro l'altra?

scanf("%d", &codice);

while (( codice = getchar() ) != EOF) {

// corpo dello switch

}

L'errore è lì dentro, però prova a sbatterci un attimo la testa per capire dove.
Le operazioni di input/output da stream di varia natura sono sempre un pò ostiche all'inizio.