Oppure

Loading
26/08/08 17:17
Luk3
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?!

/*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| 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' || 'Q')
  {
     return 0;
  }
  // scelte "calcolatrice"
  if (scelta == '1')
  {
  printf("\nInserisci il primo numero: ");
  scanf("%d", num1);
  printf("\nInserisci l'operatore (+, -, *, /): ");
  scanf("%c", op);
  printf("\nInserisci il secondo numero: ");
  scanf("&d", num2);
  // scelta "operatore +"
  if (op == '+')
  {
  ris = num1 + num2;
  printf("\nIl risultato è: {0}", ris);
  goto inizio;
  }
  // scelta "continua?"


  //scelta "operatore -"
  if (op == '-')
  {
        ris = num1 - num2;
        ris = num1 + num2;
        printf("\nIl risultato è: {0}\n", ris);
        goto inizio;
  }
 // scelta operatore '*'
  if (op == '*')
  {
        ris = num1 * num2;
        printf("\nIl risultato è: {0}\n", ris);
        goto inizio;
    }
    //scelta operatore '/'
    if (op == '/')
    {
        ris = num1 / num2;
        printf("\nIl risultato è: {0}\n", ris);
        goto inizio;
    }
    }

  //POTENZE
  if (scelta == '2')
  {
     printf("\nInserisci la base: ");
     scanf("%f", base);
     printf("\nInserisci l'esponente: ");
     scanf("%f", esponente);
     potenza = pow(base, esponente);
     printf("\nIl risultato è: {0}\n", potenza);
     goto inizio;
  }

  //RADICE
  if(scelta = '3')
  {
     printf("\nInserisci il numero da calcolare la radice: ");
     scanf("%f", base);
     risrad = sqrt(base);
     printf("\nLa radice di {0} è {1}: ", base, risrad);
     goto inizio;
  }

  system("PAUSE");
  return 0;
}


THX
aaa
26/08/08 17:19
Luk3
Ho già notato un errore

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


sarebbe

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


Ma nn credo sia questo l'errore fatale.. o si?
E' la prima volta ke programmo in C.
aaa
26/08/08 19:29
Luk3
Secondo errore

scanf("&d", num2);


è invece

scanf("%d", num2);
aaa
26/08/08 19:44
Overflow
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:
scanf("%formato",&variabile);


Un consiglio evita di usare il goto.
Ultima modifica effettuata da Overflow 26/08/08 19:46
aaa
26/08/08 20:36
Luk3
RISOLTO


/*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("\nInserisci il primo numero: ");
  scanf(" %d", &num1);
  printf("\nInserisci l'operatore (+, -, *, /): ");
  scanf(" %c", &op);
  printf("\nInserisci il secondo numero: ");
  scanf(" %d", &num2);
  // scelta "operatore +"
  if (op == '+')
  {
  ris = num1 + num2;
  printf("\nIl risultato e': %d\n", ris);
  goto inizio;
  }
  // scelta "continua?"


  //scelta "operatore -"
  if (op == '-')
  {
        ris = num1 - num2;
        printf("\nIl risultato e': %d\n", ris);
        goto inizio;
  }
 // scelta operatore '*'
  if (op == '*')
  {
        ris = num1 * num2;
        printf("\nIl risultato e': %d\n", ris);
        goto inizio;
    }
    //scelta operatore '/'
    if (op == '/')
    {
        ris = num1 / num2;
        printf("\nIl risultato e': %d\n", ris);
        goto inizio;
    }
    }

  //POTENZE
  if (scelta == '2')
  {
     printf("\nInserisci la base: ");
     scanf(" %f", &base);
     printf("\nInserisci l'esponente: ");
     scanf(" %f", &esponente);
     potenza = pow(base, esponente);
     printf("\nIl risultato e': %f\n", potenza);
     goto inizio;
  }

  //RADICE
  if(scelta = '3')
  {
     printf("\nInserisci il numero da calcolare la radice: ");
     scanf(" %f", &base);
     risrad = sqrt(base);
     printf("\nLa radice di %f e' %f: ", base, risrad);
     goto inizio;
  }

  system("PAUSE");
  return 0;
}
aaa
06/09/08 12:47
G82T
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
aaa
09/10/08 17:06
torn24
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 09/10/08 17:08
aaa
10/10/08 7:03
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 :)
Ultima modifica effettuata da gioser 10/10/08 7:10
aaa