|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2012
Messaggi: 28
|
[C] PROBLEMA CON SWITCH
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...
![]() ![]() 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; ![]() } } return 0; |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Se è un carattere
scanf("%c", &codice); e non scanf("%d", &codice); |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Nov 2012
Messaggi: 28
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Come mai hai inserito quelle due operazioni di lettura una dietro l'altra?
Codice:
scanf("%d", &codice); while (( codice = getchar() ) != EOF) { // corpo dello switch } Le operazioni di input/output da stream di varia natura sono sempre un pò ostiche all'inizio. Ultima modifica di [Kendall] : 31-05-2013 alle 09:05. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:10.