Probleme debutant C++ boucle if

salva1985 -  
 java4ever -
Bonjour,


Voila le code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>




int main ()


{
//entrée nombre 1
long nombre1 = 0;


printf("entrer le premmier chiffre ");

scanf("%ld", &nombre1); //nb1


//entrée nombre 2
long nombre2 = 0;


printf("entrer le deuxieme chiffre ");

scanf("%ld", &nombre2); //nb2



//choix operateur
char oper;

scanf ("%s", &oper); //char

printf ("%s \n", &oper, 65);



//Cacul +

long result = 0;
long stringtest = (strcmp(&oper, "plus"));

printf("stringtest %ld ", stringtest);

stringtest = false;

printf("stringtest %ld ", stringtest);



if (stringtest = false)
{
(result = nombre1 + nombre2);
printf("Le résultat vaut %ld ", result);
}




return 0;

}

une fois compilé

nicolas@nicolas-desktop:~$ ./a.out
entrer le premmier chiffre 5
entrer le deuxieme chiffre 6
plus
plus
stringtest 0 stringtest 0 nicolas@nicolas-desktop:~$


pourquoi la boucle if ne se lance pas.


merci

2 réponses

java4ever
 
salva (et ludo) bonjour !
ludo a raison, le test doit utiliser l'opérateur == et pas =, mais il y a d'autres erreurs dans le programme :
la première, classique (et dramatique) chez les débutant en C/C++ est la confusion entre un char et un tableau de char.
si tu déclare
char oper;
tu ne pourra mettre, sans déborder sur la mémoire qu'un seul caractère.
quand tu fais scanf("%s", &ope); et que l'utilisateur tape "plus", scanf va écrire 5 caractères à partir de la case mémoire allouée par car ope :
"plus\0" c'est à dire une "null terminated string".
Or ta déclaration n'a réservé qu'une case, et avec un peu de bol, comme c'est une machine 32 bits, si tu ne saisi qu'un caractère, le 0 n'écrasera rien, mais au delà , le risque est TRES IMPORTANT d'écrasement mémoire.

Ce qu'il faut que tu fasse, c'est déclarer un tableau de char pré-dimensionné à au moins le nombre de caractères autorisés plus un.
Si tu veux permettre "plus", "moins", "divise" et "multiplie", déclare :
char ope[10]; // ce qui permet de rentrer multiplie avec un null terminated.
Attention, tous les endroits ou tu a mis &ope, il faut mettre ope puisque le nom d'un tableau est en fait l'adresse du premier octet du tableau.

Enfin, un dernier truc, remplace printf ("%s \n", &oper, 65); par printf ("%s \n", oper) ;
et là tout est ok :=)
1
Ludo
 
if (stringtest == false)
0