Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Dov'è l'errore? [Calcolatrice]
Forum - C/C++ - Dov'è l'errore? [Calcolatrice]

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Luk3 (Ex-Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 19:17
Martedì, 26/08/2008
Ciao!
Ecco il codice della mia calcolatrice, che è pure capace a far potenze e radici :rotfl:

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

  1. /*Soft by Luk3, 2008.
  2. visit www.pierotofy.it or www.pchacker.helloweb.eu
  3. to save your computer from blue screen
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.   int num1, num2, ris;
  12.   char scelta, op;
  13.   double base, esponente, potenza,  risrad;
  14.   inizio:
  15.   printf("\n\t|=================|");
  16.   printf("\n\t| 1. Calcolatrice |");
  17.   printf("\n\t| 2. Potenze      |");
  18.   printf("\n\t| 3. Radici       |");
  19.   printf("\n\t| Q. Esci         |");
  20.   printf("\n\t|=================|");
  21.   printf("\n\n");
  22.   scanf("%c", scelta);
  23.  // scelte
  24.   if (scelta == 'q' || 'Q')
  25.   {
  26.      return 0;
  27.   }
  28.   // scelte "calcolatrice"
  29.   if (scelta == '1')
  30.   {
  31.   printf("\nInserisci il primo numero: ");
  32.   scanf("%d", num1);
  33.   printf("\nInserisci l'operatore (+, -, *, /): ");
  34.   scanf("%c", op);
  35.   printf("\nInserisci il secondo numero: ");
  36.   scanf("&d", num2);
  37.   // scelta "operatore +"
  38.   if (op == '+')
  39.   {
  40.   ris = num1 + num2;
  41.   printf("\nIl risultato è: {0}", ris);
  42.   goto inizio;
  43.   }
  44.   // scelta "continua?"
  45.  
  46.  
  47.   //scelta "operatore -"
  48.   if (op == '-')
  49.   {
  50.         ris = num1 - num2;
  51.         ris = num1 + num2;
  52.         printf("\nIl risultato è: {0}\n", ris);
  53.         goto inizio;
  54.   }
  55.  // scelta operatore '*'
  56.   if (op == '*')
  57.   {
  58.         ris = num1 * num2;
  59.         printf("\nIl risultato è: {0}\n", ris);
  60.         goto inizio;
  61.     }
  62.     //scelta operatore '/'
  63.     if (op == '/')
  64.     {
  65.         ris = num1 / num2;
  66.         printf("\nIl risultato è: {0}\n", ris);
  67.         goto inizio;
  68.     }
  69.     }
  70.  
  71.   //POTENZE
  72.   if (scelta == '2')
  73.   {
  74.      printf("\nInserisci la base: ");
  75.      scanf("%f", base);
  76.      printf("\nInserisci l'esponente: ");
  77.      scanf("%f", esponente);
  78.      potenza = pow(base, esponente);
  79.      printf("\nIl risultato è: {0}\n", potenza);
  80.      goto inizio;
  81.   }
  82.  
  83.   //RADICE
  84.   if(scelta = '3')
  85.   {
  86.      printf("\nInserisci il numero da calcolare la radice: ");
  87.      scanf("%f", base);
  88.      risrad = sqrt(base);
  89.      printf("\nLa radice di {0} è {1}: ", base, risrad);
  90.      goto inizio;
  91.   }
  92.  
  93.   system("PAUSE");
  94.   return 0;
  95. }



THX

PM Quote
Avatar
Luk3 (Ex-Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 19:19
Martedì, 26/08/2008
Ho già notato un errore

Codice sorgente - presumibilmente C/C++

  1. if (scelta == 'q' || 'Q')



sarebbe

Codice sorgente - presumibilmente C/C++

  1. if (scelta == 'q' || scelta ==  'Q')



Ma nn credo sia questo l'errore fatale.. o si?
E' la prima volta ke programmo in C.

PM Quote
Avatar
Luk3 (Ex-Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 21:29
Martedì, 26/08/2008
Secondo errore

Codice sorgente - presumibilmente Plain Text

  1. scanf("&d", num2);



è invece

Codice sorgente - presumibilmente Plain Text

  1. scanf("%d", num2);


PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 21:44
Martedì, 26/08/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

  1. scanf("%formato",&variabile);



Un consiglio evita di usare il goto.

Ultima modifica effettuata da Overflow il 26/08/2008 alle 21:46
PM Quote
Avatar
Luk3 (Ex-Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 22:36
Martedì, 26/08/2008
RISOLTO


Codice sorgente - presumibilmente C++

  1. /*Soft by Luk3, 2008.
  2. visit www.pierotofy.it or www.pchacker.helloweb.eu
  3. to save your computer from blue screen
  4. Grazie a Zani88.*/
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <math.h>
  9.  
  10. int main(int argc, char *argv[])
  11. {
  12.   int num1, num2, ris;
  13.   char scelta, op;
  14.   float base, esponente, potenza,  risrad;
  15.   inizio:
  16.   printf("\n\t|=================|");
  17.   printf("\n\t| 1. Calcolatrice |");
  18.   printf("\n\t| 2. Potenze      |");
  19.   printf("\n\t| 3. Radici       |");
  20.   printf("\n\t| Q. Esci         |");
  21.   printf("\n\t|=================|");
  22.   printf("\n\n");
  23.   scanf(" %c", &scelta);
  24.  // scelte
  25.   if (scelta == 'q' || scelta ==  'Q')
  26.   {
  27.      return 0;
  28.   }
  29.   // scelte "calcolatrice"
  30.   if (scelta == '1')
  31.   {
  32.   printf("\nInserisci il primo numero: ");
  33.   scanf(" %d", &num1);
  34.   printf("\nInserisci l'operatore (+, -, *, /): ");
  35.   scanf(" %c", &op);
  36.   printf("\nInserisci il secondo numero: ");
  37.   scanf(" %d", &num2);
  38.   // scelta "operatore +"
  39.   if (op == '+')
  40.   {
  41.   ris = num1 + num2;
  42.   printf("\nIl risultato e': %d\n", ris);
  43.   goto inizio;
  44.   }
  45.   // scelta "continua?"
  46.  
  47.  
  48.   //scelta "operatore -"
  49.   if (op == '-')
  50.   {
  51.         ris = num1 - num2;
  52.         printf("\nIl risultato e': %d\n", ris);
  53.         goto inizio;
  54.   }
  55.  // scelta operatore '*'
  56.   if (op == '*')
  57.   {
  58.         ris = num1 * num2;
  59.         printf("\nIl risultato e': %d\n", ris);
  60.         goto inizio;
  61.     }
  62.     //scelta operatore '/'
  63.     if (op == '/')
  64.     {
  65.         ris = num1 / num2;
  66.         printf("\nIl risultato e': %d\n", ris);
  67.         goto inizio;
  68.     }
  69.     }
  70.  
  71.   //POTENZE
  72.   if (scelta == '2')
  73.   {
  74.      printf("\nInserisci la base: ");
  75.      scanf(" %f", &base);
  76.      printf("\nInserisci l'esponente: ");
  77.      scanf(" %f", &esponente);
  78.      potenza = pow(base, esponente);
  79.      printf("\nIl risultato e': %f\n", potenza);
  80.      goto inizio;
  81.   }
  82.  
  83.   //RADICE
  84.   if(scelta = '3')
  85.   {
  86.      printf("\nInserisci il numero da calcolare la radice: ");
  87.      scanf(" %f", &base);
  88.      risrad = sqrt(base);
  89.      printf("\nLa radice di %f e' %f: ", base, risrad);
  90.      goto inizio;
  91.   }
  92.  
  93.   system("PAUSE");
  94.   return 0;
  95. }


PM Quote
Avatar
G82T (Founder Member)
Expert


Messaggi: 225
Iscritto: 14/08/2005

Segnala al moderatore
Postato alle 14:47
Sabato, 06/09/2008
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

PM Quote
Avatar
torn24 (Normal User)
Pro


Messaggi: 156
Iscritto: 04/01/2008

Segnala al moderatore
Postato alle 19:06
Giovedì, 09/10/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
PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 9:03
Venerdì, 10/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
PM Quote
Avatar
torn24 (Normal User)
Pro


Messaggi: 156
Iscritto: 04/01/2008

Segnala al moderatore
Postato alle 10:15
Venerdì, 10/10/2008
Testo quotato

Postato originariamente da gioser:

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 :)




grazie ho risolto mettendo uno spazio prima del
carattere di formato  e cambiando sottrazzione in
sottrazione non so quale delle due modifiche ha funzionato

:):)  trovo strana questa cosa dello spazio:-|

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo