cs_Nonobis
Messages postés4Date d'inscriptionjeudi 17 octobre 2002StatutMembreDernière intervention18 octobre 2002
-
17 oct. 2002 à 11:26
cs_Nonobis
Messages postés4Date d'inscriptionjeudi 17 octobre 2002StatutMembreDernière intervention18 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)
jcecchi
Messages postés117Date d'inscriptionsamedi 12 janvier 2002StatutMembreDernière intervention14 janvier 20033 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.