Process returned 255(0xff)

Fermé
nad-ben Messages postés 1 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 6 mai 2014 - 6 mai 2014 à 18:41
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 juin 2014 à 16:38
slt je suis entrain de faire un programme en 'c' qui vise a évaluer une expression arithmétique , n'ayant pas vraiment avancer dans le programme je décide quand même de compiler question de voir a peu-prés si sa marche sans problème, je compile et je lance l'exécutable ,je rentre le nombre puis quand je rentre l'opérateur le programme cesse de fonctionner et il affiche ce message d'erreur ''Process returned 255 (0xFF)"
voici mon code ne pas prendre compte de la fin du code juste pourquoi je ne peux pas saisir l'opérateur voici mon code merci d'avance j'espère une réponse de votre part au plus brève délai </code>
typedef struct
{
int T[ 10];
int nb;
} pile ;
pile A;

typedef struct
{
char k[10];
char oper;
} pile2;
pile2 B;





pile innitialiser1()
{ pile A;
A.nb=0;
return A;
}

pile2 innitialiser2()
{ pile2 B;
B.oper=0;
return B;
}

pile empiler1( pile A ,int x)
{
A.T[A.nb]=x;
A.nb++;
return A;
}
int accedersomet1 (pile A)
{
int x;
x=A.T[A.nb-1];
return x;
}
int accedersomet2 (pile2 B)
{
int x;
x=B.k[B.oper-1];
return x;
}


pile2 empiler2(pile2 B ,char d)
{

B.k[B.oper]=d;
B.oper++;
return B;
}

int depiler1(pile*A)
{
int x;
x=A->T[A->nb-1];
A->nb--;
return x;
}

char depiler2(pile2*B)
{
char op;
op=B->k[B->oper-1];
B->oper--;
return op;
}
int main()
{
int m,n,res,res2,resultat; char operateur;
printf("entrer votre operation arithmetique\n");
pile innitialiser1();
scanf("%d",&m);
empiler1(A,m);
pile innitialiser2();
scanf("c",&operateur);

empiler2(B,operateur);
while(operateur != '=')
{
scanf("%d",&n);
pile*empiler1(A,n);
if ((operateur='*') || (operateur='/'))
{
n=depiler1(n);
operateur=depiler2(operateur);
m=depiler1(m);
switch(operateur)
{
case '*': res=m*n;
case '/': res=m/n;
}
}
else
{scanf("%c",&operateur);
pile2*empiler2(B,operateur);
}
}

accedersomet1( A);
depiler1(n);
accedersomet2(B);
char*depiler2(B);
accedersomet1(A);
depiler1(m);
switch(operateur)
{
case'+': res2=m+n;
case'-': res2=m-n;
}
res2=n+m;
resultat=res+res2;


printf("%d",&resultat);
}
</code>
voici mon code source
A voir également:

2 réponses

Bonjour,

La ligne suivante n'est pas correcte :

if ((operateur='*') || (operateur='/'))

Il faut écrire :

if ((operateur=='*') || (operateur=='/'))

sinon le caractère '*' ou '/' est affecté à la variable operateur et ensuite évaluée par rapport à 0.
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
8 juin 2014 à 16:38
Bonjour,

Tu t'es trompé dans l'utilisation de la balise "code". Donc ton code reste illisible. C'est <*code c>ici je mets le code<*/code> (sans l'étoile).

Sinon plusieurs erreurs que tu aurais pu voir (pour certaines) en lisant les messages de ton compilateur.

pile A;
Pourquoi déclarer une variable globale ? A enlever.
De même pour pile B. Il vaut mieux utiliser des variables locales et les passer en argument.

pile innitialiser1();
Cela n'est pas correct. Plutôt : pile A = innitialiser1();
Pour info, initialiser s'écrit avec un seul "n".

Même remarque pour : pile innitialiser2();

scanf("c",&operateur);
Ce n'est pas "c" mais "%c".

if ((operateur='*') || (operateur='/'))
L'opérateur de comparaison est == et non =.

pile*empiler1(A,n);
Que veux-tu faire ?? Si c'est pour empiler : empiler1(A,n); tout simplement.

case '*': res=m*n;
Il faut breaker les cases...
=>
case '*' : 
     res=m*n; 
     break;


switch(operateur)
{
case'+': res2=m+n;
case'-': res2=m-n;
}
res2=n+m;

Est-ce normal de refaire res2=n+m; en dehors du switch ???

Il y a d'autres erreurs similaires. Je te laisse donc relire ton code, corriger celles que je t'ai signalées, et celles qui sont similaires.

Ensuite, reposte ton code corrigé en faisant attention aux balises.

Cdlt,
0