Pbs avec une calculatrice

cs_Nonobis Messages postés 4 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 18 octobre 2002 - 17 oct. 2002 à 11:26
cs_Nonobis Messages postés 4 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 18 octobre 2002 - 17 oct. 2002 à 12:40
slt tous !
Le premier qui m'aidea sera le bienvenu ...

(1er post ici ...)

Voial, le prob est dans le code d'une calculatrice en c que je susi en train de faire ... c'est une calculatrice de base qui prend les arguments en ligne de commande (la fonction atoi est uen refairte maison - ordre du prof oblige ...).

Le compilateur vc++ 6.0 m'annonce trouver aucune erreur dans le code, pourtant quand j'execute le prog dans une fenetre ms-dos (syntax : calculatrice 2 + 5 ), m'annonce que le prog a rencontré une erreur grave et donc il plante

si quelqu'un pouvait m'aider à résoudre ce probleme ... merci d'avance !

voici le code complet pour le moment :

// programme de calculatrice en mode ligne de commande
#include <stdio.h>
#include <stdlib.h>

// Déclaration des prototypes

int plus(int signed op1,int signed op2);
int moins(int signed op1,int signed op2);
int multi(int signed op1,int signed op2);
int divi(int signed op1,int signed op2);
int carre(int signed op1);
int expo(int signed op1,int signed op2);
int signed atoi2(char s[]);

int main(int argc,char *argv[])
{
// Déclaration des variables
int signed op1,op2;
int res;

// Transforme les arguments caracteres en chiffres
op1=atoi2(argv[2]);
op2=atoi2(argv[4]);

// Appelle de la fonction
if (argv[3]="+")
{
// fonction plus
res=plus(op1,op2);
}
if (argv[3]="-")
{
// Fonction moins
res=moins(op1,op2);
}
if (argv[3]="*")
{
// Fonction multiplication
res=multi(op1,op2);
}
if (argv[3]="/")
{
// Fonction Division
res=divi(op1,op2);
}
if ((argv[3]="c") || (argv[3]="C"))
{
// Fonction op1²
res=carre(op1);
}
if ((argv[3]="e") || (argv[3]="E"))
{
// Fonction exposant
res=expo(op1,op2);
}

// affiche le resultat
printf("Resultat = %u \n",res);

// marque une pause systeme
system("PAUSE");
return 0;
}

int signed atoi2(char *s)
{
// convertit une chaine de caractere
// en un entier
int signed n=0;

while ((*s>='0') && (*s<='9'))
{
n = 10*n + (*s-'0');
s++;
}
return n;
}

int plus(int signed op1,int signed op2)
{
// fait une addition des 2 paramaetres
return op1+op2;
}

int moins(int signed op1,int signed op2)
{
// fait une soustraction des 2 paramaetres
return op1-op2;
}

int multi(int signed op1,int signed op2)
{
// fait une multiplication des 2 paramaetres
return op1*op2;
}

int divi(int signed op1,int signed op2)
{
// fait une division des 2 paramaetres
return op1/op2;
}

int carre(int signed op1)
{
// calcule le carre d'op1
return (op1*op1);
}
int expo(int signed op1,int signed op2)
{
// calcul op1^op2
int n=0,res=1;
// calcul
while (op2>=1)
{
res=res=res+op1*op1;
op2--;
}
// retourne la valeur
return res;
} :sad)

à bientot et merci pour la reponse

Nonobis

2 réponses

jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
17 oct. 2002 à 12:09
Salut,

Avant toute chose, il faut verifier le nombre d'arguments passés par la ligne de commande.

if(argc != 4)
{
//Affichage erreur et mode d'emploi
}

Ensuite tu te trompres pour les indices de argv.
Par exemple calculatrice 2 + 5 :
argv[0] : chemin de l'application.
argv[1] : 2.
argv[2] : +.
argv[3] : 5.

Un autre truc, dans tes if, la syntaxe n'est pas x=y mais x==y.

Voila pour un debut.
0
cs_Nonobis Messages postés 4 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 18 octobre 2002
17 oct. 2002 à 12:40
Merci jcecchi

grace à toi je peut debugger le programe s'execute maintenant ...

j'ai envie de me tirer des baffes vu mes erreurs (== ....)

sur ce

ciao
Nonobis
0
Rejoignez-nous