Probleme debutant C++ boucle if
salva1985
-
java4ever -
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
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
A voir également:
- Probleme debutant C++ boucle if
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Tv orange chargement en boucle ✓ - Forum TV & Vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Boucle excel sans macro - Forum Excel
2 réponses
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 :=)
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 :=)