PDA

View Full Version : [C] Problema con switch e getchar()


Il Razziatore
30-09-2007, 11:17
Ho scritto questo programmino per provare le cose di base (ho iniziato il C da... ieri :asd:):

#include <stdio.h>

int n1,n2,risultato,scelta;

main()
{
printf("\nCosa vuoi fare?\n");
printf("1)moltiplicazione 2)addizione\n");
printf("3)divisione 4)sottrazione\n");
scanf("%d",&scelta);
switch(scelta)
{
case 1:
printf("Inserisci il primo numero: ");
scanf("%d",&n1);
printf("Inserisci il secondo numero: ");
scanf("%d",&n2);
risultato=n1*n2;
printf("\nIl risultato di %d*%d e': %d\n",n1,n2,risultato);
break;
case 2:
printf("Inserisci il primo numero: ");
scanf("%d",&n1);
printf("Inserisci il secondo numero: ");
scanf("%d",&n2);
risultato=n1+n2;
printf("\nIl risultato di %d+%d e': %d\n",n1,n2,risultato);
break;
default:
printf("Non disponibile");
}
getchar();
return 0;
}

Se faccio la moltiplicazione o l'addizione non faccio in tempo a vedere il risultato.
Anche con getchar non funziona.

Come devo fare?

Grazie ciao

ndakota
30-09-2007, 12:23
mettine due.. oppure una scanf di una tua variabile giusto per tenere aperta la schermata..

Il Razziatore
30-09-2007, 13:15
Ok, grazie mille ora funziona.

Mi è spuntato un altro problema andando a fare la divisione:
case 3:
printf("Inserisci il primo numero: ");
scanf("%f",&n1f);
printf("Inserisci il secondo numero: ");
scanf("%f",&n2f);
risultatof=n1/n2;
printf("\nLa divisione tra %f e %f e': %f",n1f,n1f,risultatof);
break;
Quando vado ad inserire il primo numero mi crasha ç___ç

Perchè?

ndakota
30-09-2007, 13:30
non vedo la dichiarazione di quella variabile ma premuso tu l'abbia fatta.. è un double?

ndakota
30-09-2007, 13:31
Ok, grazie mille ora funziona.



ah, anche prima funzionava ma il tuo occhio non è così svelto da vedere il risultato :D

Il Razziatore
30-09-2007, 18:30
non vedo la dichiarazione di quella variabile ma premuso tu l'abbia fatta.. è un double?Si si, dichiarata: ecco come si presenta ora
#include <stdio.h>

int n1,n2,risultato,scelta;
float n1f,n2f,risultatof;

main()
{
printf("\nCosa vuoi fare?\n");
printf("1)moltiplicazione 2)addizione\n");
printf("3)divisione 4)sottrazione\n");
scanf("%d",&scelta);
switch(scelta)
{
case 1:
printf("Inserisci il primo numero: ");
scanf("%d",&n1);
printf("Inserisci il secondo numero: ");
scanf("%d",&n2);
risultato=n1*n2;
printf("\nLa moltiplicazione tra %d e %d e': %d\n",n1,n2,risultato);
break;
case 2:
printf("Inserisci il primo numero: ");
scanf("%d",&n1);
printf("Inserisci il secondo numero: ");
scanf("%d",&n2);
risultato=n1+n2;
printf("\nLa somma tra %d e %d e': %d\n",n1,n2,risultato);
case 3:
printf("Inserisci il primo numero: ");
scanf("%2.2f",&n1f);
printf("Inserisci il secondo numero: ");
scanf("%2.2f",&n2f);
risultatof=n1/n2;
printf("\nLa divisione tra %2.2f e %2.2f e': %2.2f",n1f,n1f,risultatof);
break;
default:
printf("Non disponibile");
}
getchar();
getchar();
return 0;
}

ah, anche prima funzionava ma il tuo occhio non è così svelto da vedere il risultato :D... forse lo devo aggiornare... :asd:

ndakota
30-09-2007, 19:12
ma funziona o no? in ogni caso ricordati di controllare il secondo numero nella divisione che non può essere zero altrimenti ti crasha in runtime..

Il Razziatore
30-09-2007, 19:45
Si, continua a crasharmi. Scrivo 9, do invio e crasha subito.

Ziosilvio
01-10-2007, 15:40
Ok, grazie mille ora funziona.

Mi è spuntato un altro problema andando a fare la divisione:
case 3:
printf("Inserisci il primo numero: ");
scanf("%f",&n1f);
printf("Inserisci il secondo numero: ");
scanf("%f",&n2f);
risultatof=n1/n2;
printf("\nLa divisione tra %f e %f e': %f",n1f,n1f,risultatof);
break;
Quando vado ad inserire il primo numero mi crasha ç___ç

Perchè?
Non vorrei sbagliare, ma mi sa che rimane un newline sullo standard output dopo che hai operato la scelta; e quello, venendo letto dalla scanf successiva, dà problemi.
Ora provo io...
EDIT: boh... io, con un codice simile, nessun problema...