Forum - C/C++
- Dov'è l'errore? [Calcolatrice]
Pagine: [ 1 2 ]
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
Ciao!
Ecco il codice della mia calcolatrice, che è pure capace a far potenze e radici
Il problema è che all'inzio, quando immetto il numero della scelta, mi esce un messaggio di windows ke dice "Progetto1.exe ha smesso di funzionare".. dove sarebbe l'errore scusate? A me sembra tutto corretto.. o no?!
Codice sorgente - presumibilmente C
/*Soft by Luk3, 2008.
visit www.pierotofy.it or www.pchacker.helloweb.eu
to save your computer from blue screen
*/
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char * argv[ ] )
{
int num1, num2, ris;
char scelta, op;
double base, esponente, potenza, risrad;
inizio:
printf ( "\n \t |=================|" ) ; printf ( "\n \t | 1. Calcolatrice |" ) ; printf ( "\n \t |=================|" ) ; scanf( "%c" , scelta) ;
// scelte
if ( scelta == 'q' || 'Q' )
{
return 0 ;
}
// scelte "calcolatrice"
if ( scelta == '1' )
{
printf ( "\n Inserisci il primo numero: " ) ; scanf( "%d" , num1) ;
printf ( "\n Inserisci l'operatore (+, -, *, /): " ) ; scanf( "%c" , op) ;
printf ( "\n Inserisci il secondo numero: " ) ; scanf( "&d" , num2) ;
// scelta "operatore +"
if ( op == '+' )
{
ris = num1 + num2;
printf ( "\n Il risultato è: {0}" , ris
) ; goto inizio;
}
// scelta "continua?"
//scelta "operatore -"
if ( op == '-' )
{
ris = num1 - num2;
ris = num1 + num2;
printf ( "\n Il risultato è: {0}\n " , ris
) ; goto inizio;
}
// scelta operatore '*'
if ( op == '*' )
{
ris = num1 * num2;
printf ( "\n Il risultato è: {0}\n " , ris
) ; goto inizio;
}
//scelta operatore '/'
if ( op == '/' )
{
ris = num1 / num2;
printf ( "\n Il risultato è: {0}\n " , ris
) ; goto inizio;
}
}
//POTENZE
if ( scelta == '2' )
{
printf ( "\n Inserisci la base: " ) ; scanf( "%f" , base) ;
printf ( "\n Inserisci l'esponente: " ) ; scanf( "%f" , esponente) ;
potenza = pow( base, esponente) ;
printf ( "\n Il risultato è: {0}\n " , potenza
) ; goto inizio;
}
//RADICE
if ( scelta = '3' )
{
printf ( "\n Inserisci il numero da calcolare la radice: " ) ; scanf( "%f" , base) ;
risrad = sqrt( base) ;
printf ( "\n La radice di {0} è {1}: " , base
, risrad
) ; goto inizio;
}
system( "PAUSE" ) ;
return 0 ;
}
THX
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
Ho già notato un errore
Codice sorgente - presumibilmente C/C++
if (scelta == 'q' || 'Q')
sarebbe
Codice sorgente - presumibilmente C/C++
if (scelta == 'q' || scelta == 'Q')
Ma nn credo sia questo l'errore fatale.. o si?
E' la prima volta ke programmo in C.
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
Secondo errore
Codice sorgente - presumibilmente Plain Text
è invece
Codice sorgente - presumibilmente Plain Text
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
evita di scrivere un nuovo messaggio nel topic quando l'ultimo è il tuo.
Edita il tuo ultimo messaggio.
la scanf come secondo paramentro vuole l'indirizzo della variabile quindi:
Codice sorgente - presumibilmente Plain Text
scanf("%formato",&variabile);
Un consiglio evita di usare il goto.
Ultima modifica effettuata da Overflow il 26/08/2008 alle 21:46
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
RISOLTO
Codice sorgente - presumibilmente C++
/*Soft by Luk3, 2008.
visit www.pierotofy.it or www.pchacker.helloweb.eu
to save your computer from blue screen
Grazie a Zani88.*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main( int argc, char * argv[ ] )
{
int num1, num2, ris;
char scelta, op;
float base, esponente, potenza, risrad;
inizio:
printf ( "\n \t |=================|" ) ;
printf ( "\n \t | 1. Calcolatrice |" ) ;
printf ( "\n \t | 2. Potenze |" ) ;
printf ( "\n \t | 3. Radici |" ) ;
printf ( "\n \t | Q. Esci |" ) ;
printf ( "\n \t |=================|" ) ;
printf ( "\n \n " ) ;
scanf ( " %c" , & scelta) ;
// scelte
if ( scelta == 'q' || scelta == 'Q' )
{
return 0 ;
}
// scelte "calcolatrice"
if ( scelta == '1' )
{
printf ( "\n Inserisci il primo numero: " ) ;
scanf ( " %d" , & num1) ;
printf ( "\n Inserisci l'operatore (+, -, *, /): " ) ;
scanf ( " %c" , & op) ;
printf ( "\n Inserisci il secondo numero: " ) ;
scanf ( " %d" , & num2) ;
// scelta "operatore +"
if ( op == '+' )
{
ris = num1 + num2;
printf ( "\n Il risultato e': %d\n " , ris) ;
goto inizio;
}
// scelta "continua?"
//scelta "operatore -"
if ( op == '-' )
{
ris = num1 - num2;
printf ( "\n Il risultato e': %d\n " , ris) ;
goto inizio;
}
// scelta operatore '*'
if ( op == '*' )
{
ris = num1 * num2;
printf ( "\n Il risultato e': %d\n " , ris) ;
goto inizio;
}
//scelta operatore '/'
if ( op == '/' )
{
ris = num1 / num2;
printf ( "\n Il risultato e': %d\n " , ris) ;
goto inizio;
}
}
//POTENZE
if ( scelta == '2' )
{
printf ( "\n Inserisci la base: " ) ;
scanf ( " %f" , & base) ;
printf ( "\n Inserisci l'esponente: " ) ;
scanf ( " %f" , & esponente) ;
potenza = pow ( base, esponente) ;
printf ( "\n Il risultato e': %f\n " , potenza) ;
goto inizio;
}
//RADICE
if ( scelta = '3' )
{
printf ( "\n Inserisci il numero da calcolare la radice: " ) ;
scanf ( " %f" , & base) ;
risrad = sqrt ( base) ;
printf ( "\n La radice di %f e' %f: " , base, risrad) ;
goto inizio;
}
system ( "PAUSE" ) ;
return 0 ;
}
G82T (Founder Member )
Expert
Messaggi: 225
Iscritto: 14/08/2005
l'errore credo sia perchè non hai messo la &prima dellla variabile nello scanf, la &è l'operatore di allocazione in c, e come ti è già stato detto evita i goto, metti tutto dentro un do while e usa la condizione del while per ciclare oppure no
torn24 (Normal User)
Pro
Messaggi: 156
Iscritto: 04/01/2008
ho preso il codice di questa calcolatrice e
ne ho fatto una che fa solo le quattro operazioni
ma il codice è pensato strutturato senza goto
mi da un errore saltando uno scanf io chi trova
l'errore
ecco il codice
#include <stdio.h>
#include <stdlib.h>
void somma();
void sottrazzione();
void divisione();
void moltiplicazione();
float num1,num2,ris;
char op,scelta;
int main(int argc, char *argv[])
{
while(scelta!='q'||scelta!='Q'){
printf("\t\t------------ Calcolatrice ------------\n\n\t\tPremere q per uscire un altro tasto per continuare\n");
scanf("%C",&scelta);
if (scelta == 'q' || scelta == 'Q')
{
return 0;
}
// scelte "calcolatrice"
printf("\nInserisci il primo numero: ");
scanf(" %f", &num1);
printf("\nInserisci l'operatore (+, -, *, /): ");
scanf(" %c", &op);
printf("\nInserisci il secondo numero: ");
scanf(" %f", &num2);
// scelta "operatore +"
switch (op)
{
case '+' :
somma();
break;
case '-' :
sottrazzione();
break;
case '/' :
divisione();
break;
case '*' :
moltiplicazione();
break;
}
}
}
void somma()
{
ris = num1 + num2;
printf("\nIl risultato somma e': %.2f\n", ris);
}
void sottrazzione()
{
ris = num1 - num2;
printf("\nIl risultato sottrazione e': %.2f\n", ris);
}
void moltiplicazione()
{
ris = num1 * num2;
printf("\nIl risultato moltiplicazione e': %.2f\n", ris);
}
void divisione()
{
ris = num1 / num2;
printf("\nIl risultato divisione e': %.2f\n", ris);
}
Ultima modifica effettuata da torn24 il 09/10/2008 alle 19:08
gioser (Normal User)
Pro
Messaggi: 111
Iscritto: 03/10/2008
un errore e' sottrazione con due zeta
un altro errore è che non controllate i valori restituiti dalle scanf
mentre per l'errore che hai notato, il problema e' che la scanf di un carattere prende anche il line feed, cioe' il carattere 10,
potresti aggiungere uno spazio prima del carattere di formato della prima scanf, come hai fatto nelle altre scanf
scanf(" %C",&scelta);
Ciao
Ultima modifica effettuata da gioser il 10/10/2008 alle 9:10
torn24 (Normal User)
Pro
Messaggi: 156
Iscritto: 04/01/2008