PDA

Visualizza la versione completa : piccolo problema con un programma...


elialongoni04
23-07-2011, 12:59
ciao a tutti...il programma in se funziona, però non riesco a capire perchè mi ripete 2 volte questo:printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");
....so che il programma non ha senso,cioè la terra ecc, era per esercitarmi.....e volevo sapere come risolvere il mio problema...per capire meglio eseguite il programma....io credo che c faccia un ciclo a vuoto ogni volta e così mi chiede 2 volte di inserire printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");.....ma perché??? grazie|!!


#include<stdio.h>
#include<stdlib.h>
main()
{
char f;
float terra,lato,area,lator,lator1,h1,latot,h2,h3,area1, avanzo;
int cont1,cont2,cont3;
printf("TU HAI DEI METRI DI TERRA CHE VUOI METTERE DENTRO DELLE SCATOLE..\nMA NON SAI QUANTE TE NE SERVONO....\n\n");
printf("Quanti metri di terra hai?? ");
scanf("%f",&terra);
printf("Hai a disposizione 3 scatole di varie dimensioni: \n");
area=0;
area1=0;
cont1=0;
cont2=0;
cont3=0;
do
{
printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");
scanf("%c",&f);

switch (f)
{
case 'c':
{
printf("Dammi il lato del cubo: ");
scanf("%f",&lato);
area1=lato*lato*lato;
cont1++;
break;
}
case 'q':
{
printf("Dammi il lato del rettangolo: ");
scanf("%f",&lator);
printf("Dammi l'altro lato del rettangolo: ");
scanf("%f",&lator1);
printf("Dammi l'altezza del parallelepipedo: ");
scanf("%f",&h1);
area1=(lator*lator1)*h1;
cont2++;
break;
}
case 'p':
{
printf("Dammi il lato del triangolo: ");
scanf("%f",&latot);
printf("Dammi l'altezza del triangolo: ");
scanf("%f",&h2);
printf("Dammi l'altezza della piramide: ");
scanf("%f",&h3);
area1=((latot*h2)/2)*(h3/2);
cont3++;
break;
}
default:
printf("Non hai questa scatola!\n");

}
area=area+area1;
area1=0;
}
while(area<terra);
printf("\nIn totale ti servono %d cubo/i, %d parallelepipedo/i e %d piramide/i!\n",cont1,cont2,cont3);
avanzo=area-terra;
printf("\nnell'ultima scatola hai ancora a disposizione %.2f metri di spazio!\n\n",avanzo);
system("pause");
}

oregon
23-07-2011, 13:06
E' il solito problema del buffer della scanf ...

Potrai trovarlo ripetutamente citato in tanti thread di questo forum (e anche nelle "pillole")...

In ogni caso, dopo la scanf del menu, aggiungi

while (getchar()!='\n') ;

per svuotare il buffer.


P.S. Dato che sei nuovo, dai un'occhiata al Regolamento prima di aprire altri thread ...

elialongoni04
23-07-2011, 13:23
non ho capito dove inserirlo....ho provato a metterlo come primo while, ma così facendo il programma smette di funzionare perchè non mi richiede più di inserire la lettera e continua a mandarmi in default....

oregon
23-07-2011, 14:28
Originariamente inviato da elialongoni04
non ho capito dove inserirlo....

Nella risposta precedente ti ho scritto ... "dopo la scanf del menu"

elialongoni04
23-07-2011, 18:33
sai molto probabilmente sarò un pirla io e non riesco a capire...ma come ho detto non funziona, perchè se anche metto while (getchar()!='\n') ; dopo la scanf continua a mandarmi in default qualsiasi cosa scriva e il programma si blocca e non sa più che fare....

Celebron
23-07-2011, 18:42
prova ad aggiungere semplicemente un

case '\n':
break;

elialongoni04
23-07-2011, 18:46
no niente....

oregon
23-07-2011, 19:00
Originariamente inviato da elialongoni04
sai molto probabilmente sarò un pirla io e non riesco a capire...ma come ho detto non funziona, perchè se anche metto while (getchar()!='\n') ; dopo la scanf continua a mandarmi in default qualsiasi cosa scriva e il programma si blocca e non sa più che fare....

Usa la

while (getchar()!='\n') ;

anche dopo la prima scanf

elialongoni04
23-07-2011, 19:17
#include<stdio.h>
#include<stdlib.h>
main()
{
char f;
float terra,lato,area,lator,lator1,h1,latot,h2,h3,area1, avanzo;
int cont1,cont2,cont3;
printf("TU HAI DEI METRI DI TERRA CHE VUOI METTERE DENTRO DELLE SCATOLE..\nMA NON SAI QUANTE TE NE SERVONO....\n\n");
printf("Quanti metri di terra hai?? ");
scanf("%f",&terra);
printf("Hai a disposizione 3 scatole di varie dimensioni: \n");
area=0;
area1=0;
cont1=0;
cont2=0;
cont3=0;
do
{
printf("\n-Premi :\n.) c per il cubo,\n.) q per il parallelepipedo,\n.) p per la piramide: ");
scanf("%c",&f);
while (getchar()!='\n') ;
switch (f)
{
case 'c':
{
printf("\nDammi il lato del cubo: ");
scanf("%f",&lato);
area1=lato*lato*lato;
cont1++;
break;
}
case 'q':
{
printf("\nDammi il lato del rettangolo: ");
scanf("%f",&lator);
printf("\nDammi l'altro lato del rettangolo: ");
scanf("%f",&lator1);
printf("\nDammi l'altezza del parallelepipedo: ");
scanf("%f",&h1);
area1=(lator*lator1)*h1;
cont2++;
break;
}
case 'p':
{
printf("\nDammi il lato del triangolo: ");
scanf("%f",&latot);
printf("\nDammi l'altezza del triangolo: ");
scanf("%f",&h2);
printf("\nDammi l'altezza della piramide: ");
scanf("%f",&h3);
area1=((latot*h2)/2)*(h3/2);
cont3++;
break;
}
default:
printf("\n\nNon hai questa scatola!\n");
//case '\n': //credo che questo vada messo qui..
// break;
}
area=area+area1;
area1=0;
}
while(area<terra);
printf("\nIn totale ti servono %d cubo/i, %d parallelepipedo/i e %d piramide/i!\n",cont1,cont2,cont3);
avanzo=area-terra;
printf("\nnell'ultima scatola hai ancora a disposizione %.2f metri di spazio!\n\n",avanzo);
system("pause");
}

oregon
23-07-2011, 19:17
Usa la

while (getchar()!='\n') ;

anche dopo la prima scanf

Loading