Problema codice in C++......HELP
Problema codice in C++......HELP
Ragazzi devo fare un programma pero ho dei problemi....il programma chiede di inserire una cifra(moltiplo di 10) e mi restituisce la stessa cifra divisa tra tre tipi di monete...monete da 50 da 20 e da 10....es input-->110 output 2 da 50 e 1 da 10......il programma l ho fatto pero mi da degli errori piu che altro logici..il problema è il seguente....ho fatto un ciclo di controllo per verificare che l input inserito dall utente sia corretto...cio deve rispettare le suenti condizioni: (input%10==0 && input>0)....ho i seguenti problemi....se l utente inserisce un carattere il programma va in loop, se inserisce un numero non intero ma con la parte intera comunque multipla di 10 entra e fa tutte le operazioni.......FORSE NON SONO STATO MOLTO CHIARO...SE VOLETE VI POSTO DIRETTAMENTE IL CODICE
Re: Problema codice in C++......HELP
RAGAZZI VI STO POSTANDO IL CODICE
Codice: Seleziona tutto
Description: Il programma funziona come cassiere automatico, deve erogare soldi. Si chiede all utente di
inserire l importo desiderato (ricordandosi che quest ultimo deve essere un multiplo di 10)
e il programma deve visualizzare il tipo e la quantita delle monete erogate per arrivare all importo
inserito in input...le monete che il cassiere puo erogare sono 50, 20 e 10
*/
#include <stdio.h>
#include <stdlib.h>
#define monete50 50/*monete da 50 dollari*/
#define monete20 20/*monete da 20 dollari*/
#define monete10 10/*monete da 10 dollari*/
void eroga(int importo,int importo_a,int importo_b,int importo_c );
int main(void)
{
int importo,/*input-valore inserito dall utente*/
importo_a,/*variabile per la stampa dei risultati*/
importo_b,/*variabile per la stampa dei risultati*/
importo_c,/*variabile per la stampa dei risultati*/
errore,/*Gestisce eventuali errori nell inserimento dell importo*/
risposta;/*risposta al menu*/
do
{ /*mENU PRINCIPALE*/
system("CLS");
printf(" --------MENU' PRINCIPALE-------\n\n");
printf(" 1) Vai alla macchinetta delle monete\n");
printf(" 2) Torna a windows\n");
printf("\n");
printf(" Digitare cio che si desidera...");
scanf("%d", &risposta);
switch(risposta)
{
case 1:
{
do/*ciclo DO-WHILE che gestisce eventuali errori*/
{
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
if((importo%10==0)&&(importo>0))/*CONTROLLO DEL NUMERO DI INPUT*/
{
eroga (importo, importo_a, importo_b, importo_c);/*chiamata di funzione*/
}
else
{ system("CLS");
errore=1;
printf("\a\a\a\a\a\a\nL'importo inserito non e' corretto :( \n");
}
}while(errore);
}break;
case 2: break;
default:printf("\a\a\a\a\aTasto errato \n");
}
}while(risposta!=2);
}/*fine main*/
void eroga (int importo,int importo_a,int importo_b,int importo_c)/*definizione della funzione che restituisce i valori output richiesti dal problema*/
{
if(importo>=monete50)
{
importo_a=importo/monete50;
importo=importo-(monete50*importo_a);
printf("Lei ricevera' %d monete da 50 dollari\n", importo_a);
if(importo>=monete20)
{
importo_b=importo/monete20;
importo=importo-(importo_b*monete20);
printf("e %d monete da 20 dollari\n", importo_b);
}
if(importo>=monete10)
{
importo_c=importo/monete10;
importo=importo-(importo_c*monete10);
printf("e %d monete da 10 dollari\n", importo_c);
}
}
else if((importo>=monete20)&&(importo < monete50))
{
importo_b=importo/monete20;
importo=importo-(importo_b*monete20);
printf("Lei ricevera' %d monete da 20 dollari\n", importo_b);
if(importo>=monete10)
importo_c=importo/monete10;
importo=importo-(importo_c*monete10);
printf("e %d monete da 10 dollari\n", importo_c);
}
if(importo==monete10)
{
importo_c=importo/monete10;
importo=importo-(importo_c*monete10);
printf("Lei ricevera' %d monete da 10 dollari\n", importo_c);
}
printf("\n");
system("PAUSE");
printf("\n");
}
Re: Problema codice in C++......HELP
Guarda nel tuo codice c'è un errore subdolo. Il main fa una chiamata alla funzione "eroga" passandogli come parametri tre variabili non inizializzate: importo_a, importo_b e importo_c. Passare a una funzione delle variabili non inizializzate non è un errore di sintassi, quindi non è segnalato dal compilatore. Nella dichiarazione delle variabili, inizializzale tutte a 0.
Ho letto e riletto il codice tre volte, ma direi che il problema sia questo.
Ciao
Ho letto e riletto il codice tre volte, ma direi che il problema sia questo.
Ciao
Ultima modifica di gelina il martedì 21 novembre 2006, 19:33, modificato 1 volta in totale.
- difesaparcosempione
- Rampante Reduce

- Messaggi: 6031
- Iscrizione: giovedì 27 luglio 2006, 19:06
- Località: Torino
- Contatti:
Re: Problema codice in C++......HELP
Sembra un bel programma "C" 
Comunque il problema è la scanf in quanto non testi la condizione di errore.
Decidi di convertire in decimale %d quindi se immetti delle stringhe la funzione
dovrebbe darti errore.
ciao

Comunque il problema è la scanf in quanto non testi la condizione di errore.
Decidi di convertire in decimale %d quindi se immetti delle stringhe la funzione
dovrebbe darti errore.
ciao
Re: Problema codice in C++......HELP
Gelina cio che hai detto tu è giusto e ti ringrazio pero sembra non risolvere i miei problemi....il fatto della scanf scusa l ignoranza ma non ho capito potresti spiegarmelo in altre parole?????davvero ti sembra un programma o mi prendi in giro?? :P
- difesaparcosempione
- Rampante Reduce

- Messaggi: 6031
- Iscrizione: giovedì 27 luglio 2006, 19:06
- Località: Torino
- Contatti:
Re: Problema codice in C++......HELP
prima esegui man si scanf !
Vedrai cosa dice del RETURN CODE!
Visto che questa funzione di libreria C converte in un formato una stringa di input può dare delle segnalazioni.
Per imparar fai dei piccoli prg dove metti la funzione incriminata e così la testi. La scanf ritorna come codice di ritorno un intero con il numero di conversioni andate a buon fine.
Tu richiedi una conversione e quindi se tutto va bene ti ritornerà 1 se c'è un errore ti ritorna 0.
Ovvio perchè non ha convertito niente.
Comunque il programma è ordinato e sembrerebbe scritto bene. Bel programma C perchè così come è lo puoi compilare in C.
quindi
man scanf
e studia il RETURN VALUE.
ciao

Vedrai cosa dice del RETURN CODE!
Visto che questa funzione di libreria C converte in un formato una stringa di input può dare delle segnalazioni.
Per imparar fai dei piccoli prg dove metti la funzione incriminata e così la testi. La scanf ritorna come codice di ritorno un intero con il numero di conversioni andate a buon fine.
Tu richiedi una conversione e quindi se tutto va bene ti ritornerà 1 se c'è un errore ti ritorna 0.
Ovvio perchè non ha convertito niente.
Comunque il programma è ordinato e sembrerebbe scritto bene. Bel programma C perchè così come è lo puoi compilare in C.
quindi
man scanf
e studia il RETURN VALUE.
ciao
Re: Problema codice in C++......HELP
difesaparcosempione scusami...devo essere stupido ma continuo a non capire...cos e che devo fare???puoi farmi magari un esempio?ghrazie e scusa
- eminux
- Scoppiettante Seguace

- Messaggi: 288
- Iscrizione: mercoledì 15 febbraio 2006, 15:52
- Località: Milano
- Contatti:
Re: Problema codice in C++......HELP
innanzi tutto mancano gli include... ovvero le librerie (c'è solo #include ma cosa?)
poi che ne dici di mettere una scanf("%c", &var) dopo la tua scanf nel ciclo do dal quale non esce mai?
il problema è nella scanf....
do/*ciclo DO-WHILE che gestisce eventuali errori*/
{
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
scanf("%c", &nal);
if((importo%10==0)&&(importo>0))/*CONTROLLO DEL NUMERO DI INPUT*/{
eroga (importo, importo_a, importo_b, importo_c);/*chiamata di funzione*/
}else{
errore=1;
printf("\a\a\a\a\a\a\nL'importo inserito non e' corretto
\n");
}
}while(errore==1);
se sostituisci questo nel tuo codice vedrai che funziona...
occhio che devi dichiarare una variabile carattere chiamata nal ...
e perchè non inizializzi le variabili che passi? poi vengono numeri strani se non lo fai...
ciao

se hai ancora problemi chiamami in privato...
(non sarai mica uno del corso di ing matematica o fisica al politecnico di milano...)
poi che ne dici di mettere una scanf("%c", &var) dopo la tua scanf nel ciclo do dal quale non esce mai?
il problema è nella scanf....
do/*ciclo DO-WHILE che gestisce eventuali errori*/
{
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
scanf("%c", &nal);
if((importo%10==0)&&(importo>0))/*CONTROLLO DEL NUMERO DI INPUT*/{
eroga (importo, importo_a, importo_b, importo_c);/*chiamata di funzione*/
}else{
errore=1;
printf("\a\a\a\a\a\a\nL'importo inserito non e' corretto
}
}while(errore==1);
se sostituisci questo nel tuo codice vedrai che funziona...
occhio che devi dichiarare una variabile carattere chiamata nal ...
e perchè non inizializzi le variabili che passi? poi vengono numeri strani se non lo fai...
ciao
se hai ancora problemi chiamami in privato...
(non sarai mica uno del corso di ing matematica o fisica al politecnico di milano...)
eminux
Linux registered user #380522
Ubuntu registered user #9355
Coltiva linux...tanto windows si pianta da solo...
Linux registered user #380522
Ubuntu registered user #9355
Coltiva linux...tanto windows si pianta da solo...
Re: Problema codice in C++......HELP
ho provato modificandolo in questo modo...
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
carattere=scanf("%c", &var);
if((importo%10==0)&&(importo>0)&&(carattere==0))/*CONTROLLO DEL NUMERO DI INPUT*/
il risultato è che non va in loop e se inserisco un carattere mi da errore....pero ho notato ceh mi da sempre errore anche se inserisco l input giusto.........le include ci sono e sono:#include
#include
e le variabili sono tutte inizializzate a 0....non si vedono qui nel codice solo per una errore di visualizzazione ma ci sono.....
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
carattere=scanf("%c", &var);
if((importo%10==0)&&(importo>0)&&(carattere==0))/*CONTROLLO DEL NUMERO DI INPUT*/
il risultato è che non va in loop e se inserisco un carattere mi da errore....pero ho notato ceh mi da sempre errore anche se inserisco l input giusto.........le include ci sono e sono:#include
#include
e le variabili sono tutte inizializzate a 0....non si vedono qui nel codice solo per una errore di visualizzazione ma ci sono.....
- difesaparcosempione
- Rampante Reduce

- Messaggi: 6031
- Iscrizione: giovedì 27 luglio 2006, 19:06
- Località: Torino
- Contatti:
Re: Problema codice in C++......HELP
Una cosa del genere ...
int ret, importo;
ret = scanf("%d", &importo);
if ( ret == 0 )
{
printf("Errore dammi un numero")
}
else
{
.... /* tutto ok */
}
int ret, importo;
ret = scanf("%d", &importo);
if ( ret == 0 )
{
printf("Errore dammi un numero")
}
else
{
.... /* tutto ok */
}
Re: Problema codice in C++......HELP
difesa parcosempione una cosa simile a quella precedente.....ma non va
- eminux
- Scoppiettante Seguace

- Messaggi: 288
- Iscrizione: mercoledì 15 febbraio 2006, 15:52
- Località: Milano
- Contatti:
Re: Problema codice in C++......HELP
(carattere==0)
questa condizione è sbagliata....
tu la fai sulla seconda scanf
la seconda scanf ti serve per togliere dal buffer il carattere invio nel caso in cui ti sia stata inserita una lettera...
quello che ti ha scritto difesaparcosempione è un po' diverso dal tuo... ma i piccoli particolari fanno si che un programma funzioni o no...
questa condizione è sbagliata....
tu la fai sulla seconda scanf
la seconda scanf ti serve per togliere dal buffer il carattere invio nel caso in cui ti sia stata inserita una lettera...
quello che ti ha scritto difesaparcosempione è un po' diverso dal tuo... ma i piccoli particolari fanno si che un programma funzioni o no...
eminux
Linux registered user #380522
Ubuntu registered user #9355
Coltiva linux...tanto windows si pianta da solo...
Linux registered user #380522
Ubuntu registered user #9355
Coltiva linux...tanto windows si pianta da solo...
Re: Problema codice in C++......HELP
quindi tu dici di fare quella modifica che ho fatto sulla prima scanf e non la seconda....ho capito bene???
Chi c’è in linea
Visualizzano questa sezione: Majestic-12 [Bot] e 5 ospiti