[C]Problema in un programma

di il
3 risposte

[C]Problema in un programma

if(scelta_scelta_3 == 1)
			{
				printf("Inserisci la misura indicandone l'unit%c: \n \n", 133);

				printf("1. Metri cubi (m%c) \n", 252);
				printf("2. Decimetri cubi (dm%c) \n", 252);
				printf("3. Centimetri cubi (cm%c) \n \n", 252);

				printf("Digita la parte numerica della misura: ");
				scanf("%f",&parte_numerica);
				fflush(stdin);
				printf("\n");

				do
				{
					printf("Seguendo la tabella di prima, digita il numero corrispondente all'unit%c di misura: ", 133);
					scanf("%i",&unita_misura_da_convertire);
					fflush(stdin);
					printf("\n");

					if(unita_misura_da_convertire < 1 || unita_misura_da_convertire > 3)
					{
						printf("Inserimento fallito. \n");
						printf("Puoi inserire soltanto numeri da 1 a 3. \n");
						printf("Riprova. \n \n");
					}
				}
				while(unita_misura_da_convertire < 1 || unita_misura_da_convertire > 3);

				do
				{
					printf("Vuoi rimanere nei metri cubi o passare ai litri? \n");
					printf("Premi 'm' per restare nei metri cubi, 'L' per passare ai litri. ");
					fflush(stdin);
					scanf("%c",&scelta_m_cubi_o_litri);
					printf("\n");

					if(scelta_m_cubi_o_litri != 'm' && scelta_m_cubi_o_litri != 'M' && scelta_m_cubi_o_litri != 'l' && scelta_m_cubi_o_litri != 'L')
					{
						printf("Inserimento fallito. \n");
						printf("Puoi inserire soltanto l, L, m ed M. \n");
						printf("Riprova. \n \n");
					}
				}
				while(scelta_m_cubi_o_litri != 'm' && scelta_m_cubi_o_litri != 'M' && scelta_m_cubi_o_litri != 'l' && scelta_m_cubi_o_litri != 'L');

				if(scelta_m_cubi_o_litri == 'm' || scelta_m_cubi_o_litri == 'M');
				{
					do
					{
						printf("Seguendo la tabella di prima, digita il numero corrispondente all'unit%c di misura che vuoi ottenere: ", 133);
						scanf("%i",&risultato_unita_misura);
						fflush(stdin);
						printf("\n");

						if(unita_misura_da_convertire == risultato_unita_misura)
						{
							printf("Inserimento fallito. \n");
							printf("Le due unit%c di misura sono uguali.", 133);
							printf("Riprova. \n \n");
						}
					}
					while(unita_misura_da_convertire == risultato_unita_misura);

					/* Calcolo volume - metri cubi a metri cubi */

					if(unita_misura_da_convertire < risultato_unita_misura)
					{
						unita_misura_variabile = risultato_unita_misura - unita_misura_da_convertire;
					}
					else
						if(unita_misura_da_convertire > risultato_unita_misura)
						{
							unita_misura_variabile = unita_misura_da_convertire - risultato_unita_misura;
						}

					if(unita_misura_da_convertire > risultato_unita_misura)
					{
						risultato_parte_num = parte_numerica / pow(1000, unita_misura_variabile);
					}
					else
						if(unita_misura_da_convertire < risultato_unita_misura)
						{
							risultato_parte_num = parte_numerica * pow(1000, unita_misura_variabile);
						}

					printf("La parte numerica risulta %.3f \n \n", risultato_parte_num);
				} /* fine per calcolare metri cubi a metri cubi */

				if(scelta_m_cubi_o_litri == 'l' || scelta_m_cubi_o_litri == 'L')
				{
					printf("Inserisci quale unit%c di misura vuoi ottenere: \n \n", 133);

					printf("4. Kilolitri (KL) \n");
					printf("5. Ettolitri (HL) \n");
					printf("6. Decalitri (daL) \n");
					printf("7. Litri (L) \n");
					printf("8. Decilitri (dL) \n");
					printf("9. Centilitri (cL) \n");
					printf("10. Millilitri (mL) \n \n");

					do
					{
						printf("Digita il numero di seguito: ");
						scanf("%i",&risultato_unita_misura);
						fflush(stdin);
						printf("\n");

						if(risultato_unita_misura < 4 || risultato_unita_misura > 10)
						{
							printf("Inserimento fallito. \n");
							printf("Puoi inserire soltanto numeri da 4 a 10. \n");
							printf("Riprova. \n \n");
						}
					}
					while(risultato_unita_misura < 4 || risultato_unita_misura > 10);

					if((unita_misura_da_convertire == 1 && risultato_unita_misura == 4) || (unita_misura_da_convertire == 2 && risultato_unita_misura == 7) || (unita_misura_da_convertire == 3 && risultato_unita_misura == 10))
					{
						risultato_parte_num = parte_numerica;
					}

					if(unita_misura_da_convertire == 1)
					{
						unita_misura_variabile = risultato_unita_misura - 4;
						risultato_parte_num = parte_numerica * pow(10, unita_misura_variabile);
					}
					else
						if(unita_misura_da_convertire == 2)
						{
							unita_misura_variabile = risultato_unita_misura - 7;
							risultato_parte_num = parte_numerica * pow(10, unita_misura_variabile);
						}
						else
							if(unita_misura_da_convertire == 3)
							{
								unita_misura_variabile = risultato_unita_misura - 10;
								risultato_parte_num = parte_numerica * pow(10, unita_misura_variabile);
							}

					printf("La parte numerica risulta %.3f. \n \n");
				} /* termine if metri cubi a litri */
			} /* fine scelta dei metri cubi */
praticamente, quando me lo chiede, io inserisco che voglio convertire un valore che gli ho dato da metri cubi a litri.
il problema è che quando arrivo alla variabile "m_cubi_o_litri" e digito "l", lui lo percepisce come una "m", infatti mi fa restare nei metri cubi.
soltanto che dopo aver eseguito il calcolo coi metri cubi, mi dà ora come se avessi inserito una "l", mostrandomi la tabella dei multipli e sottomultipli del litro.

perciò, sperando di essermi espresso in italiano decente, cosa dovrei fare per risolvere?
il compilatore non mi dà nessun tipo di errore, perciò non manca nulla (in teoria) nel codice.

in caso vogliate provare voi stessi il programma, vi allego il codice su pastebin: http://pastebin.com/1siH0b6

(per vedere l'errore, al primo scanf digitate 3, poi 1, poi un numero qualsiasi, un numero da 1 a 3, poi l).

3 Risposte

  • Re: [C]Problema in un programma

    
    fflush(stdin);
    scanf("%c",&scelta_m_cubi_o_litri);
    
    non ti suona strano?
  • Re: [C]Problema in un programma

    vbextreme ha scritto:


    
    fflush(stdin);
    scanf("%c",&scelta_m_cubi_o_litri);
    
    non ti suona strano?
    no perchè se metto l'fflush dopo lo scanf con una variabile char non legge correttamente lo scanf

    risolto: un errore da down proprio.
    l'if se si inseriva "m" terminava con un ;
  • Re: [C]Problema in un programma

    Non fare mai fflush su input stream, mi raccomando: "[...] In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior)."
Devi accedere o registrarti per scrivere nel forum
3 risposte