Je débute en programmation C et en bon débutant je suis déjà bloqué sur un petit problème...
En effet, je me demande si il est possible lorsque l'on pose une condition IF d'avoir 2 résultats pour la même condition. J'ai un peu cherché mais je n'ai pas trouvé de réponses....
Dans mon cas je voudrais faire en sorte d'afficher un texte et de donner une nouvelle valeur à une variable lorsque qu'un joueur tape le nombre 0...
Voilà voilà j'espère que ma question n'est pas trop bête...
Et merci à l'âme charitable qui voudra bien me répondre.
Bonne Journée/Soirée !
C_pasFacile :)
if (nouvellePartie =1)
printf("OK, C'est parti \n");
else if (nouvellePartie =0)
printf("D'accord on arrete \n") ;
continuerPartie=0;
else
printf("BOn dans le doute on continue... \n");
rajoute les options de compilations -Wall -Wextra (si tu as gcc/clang) pour avoir des warnings pour t'indiquer ce genre d'oubli.
$ cat t.c
#include <stdio.h>
int main(void)
{
int a=42;
if (a=10) {
puts("a vaut 10 !");
} else {
puts("a ne vaut pas 10");
}
return 0;
}
$ gcc -Wall -Wextra -g -o t t.c
t.c: In function ‘main’:
t.c:7:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
7 | if (a=10) {
| ^
$
Tu as "une" condition, mais tu as "deux" résultats. Ou bien la condition est vérifié (premier résultat), ou bien elle ne l'est pas (deuxième résultat). Si elle est vérifiée, tu fais une chose, Sinon, tu fais autre chose ou rien du tout. Et cette autre chose peut être un autre test qui va t'amener deux résultats également. ...
Le Tout est souvent plus grand que la somme de ses parties.
if (une_condition) une_action else une_autre_action ;
Une forme simplifiée
if (une_condition) une_action;
Quand elle est exécutée :
La condition est évaluée
Si elle est vraie la première action est exécutée
Sinon c'est l'autre qui est exécutée (rien dans la forme simplifiée)
Et on passe à la suite.
En C, quand une action comporte plusieurs instructions, il faut mettre des accolades pour en faire un bloc,
if (nouvelle_partie == 12) {
printf(...);
continuer = ...;
}
Il semble que ca manque dans ton code.
Attention : en C, c'est les accolades qui marquent la structuration en blocs. Pas l'indentation (décalage vers la droite) à la différence de Python.
En C, techniquement l'indentation n'a pas de signification. C'est un langage context-free, en format libre. Mais il faut quand même la faire, sinon le code est illisible.
Du reste c'est grâce à l'indentation qu'on voit que tu voulais probablement faire un bloc lignes 4 et 5.
Pour en revenir aux accolades, il est plutôt conseillé d'en mettre aussi pour les actions qui n'ont qu'une seule instruction.
if (nouvelle_partie == 0) {
printf("ok\n");
}
Ça fait apparaître plus clairement la subordination de l'action et de la condition.
On s'en dispense quand le else contient un if, exemple dans une cascade de tests
if (truc) {
....
} else if (machin) {
...
} else if (bidule) {
...
} else {
...
}
Merci pour le conseil. Je vais me renseigner pour faire cela sur Code Blocks.
Cela m'évitera de vous embêter trop souvent.
=======
Bonjour Michel,
Merci pour ta réponse très complète.
OK j'avais pas saisi la nécessité de l'accolade lorsqu'il y a plusieurs instructions.
Effectivement cela semble être un bon moyen de distinguer l'action de la condition.
En tout cas un grand merci pour vos réponses.
C'est super sympa de se sentir accueilli de la sorte par la communauté.
Bonne journée à tous.
White Crow a écrit:
Bonjour,
rajoute les options de compilations -Wall -Wextra (si tu as gcc/clang) pour avoir des warnings pour t'indiquer ce genre d'oubli.
$ cat t.c #include <stdio.h> int main(void) { int a=42; if (a=10) { puts("a vaut 10 !"); } else { puts("a ne vaut pas 10"); } return 0; } $ gcc -Wall -Wextra -g -o t t.c t.c: In function ‘main’: t.c:7:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 7 | if (a=10) { | ^ $
Je vais me renseigner pour faire cela sur Code Blocks.
Menu --> Project --> Build Options...
Et tu coches les cases (-Wall et -Wextra) dans l'onglet : Compiler settings...
...
2 résultat pour 1 même condition
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.