Variable condition dans if
Fermé
axteure
Messages postés
61
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
-
5 janv. 2017 à 10:34
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 10 janv. 2017 à 09:43
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 10 janv. 2017 à 09:43
A voir également:
- Variable condition dans if
- Excel cellule couleur si condition texte - Guide
- Condition et excel - Guide
- Couleur texte avec la fonction si - Forum Excel
- Excel colorer une cellule sous condition d'une autre cellule ✓ - Forum Excel
7 réponses
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
Ambassadeur
1 556
Modifié par yg_be le 5/01/2017 à 11:04
Modifié par yg_be le 5/01/2017 à 11:04
Qu'as-tu essayé?
Ceci?
Ceci?
if(((choix==1) && (var1 == 10)) || ((choix==2) && (var1 > 10))){ instructions; }Attention, tu mentionnes var2 et tu ne l'utilises pas.
diablo13800
Messages postés
2890
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
16 février 2024
1 857
5 janv. 2017 à 10:58
5 janv. 2017 à 10:58
Bonjour,
C'est le principe de ce genre de conditions, pouvoir comparer des variables a des valeurs que nous souhaitons.
Cependant l'énoncé de la question n'est pas forcement très clair....
si vous mettez
Ca devrait passer
C'est le principe de ce genre de conditions, pouvoir comparer des variables a des valeurs que nous souhaitons.
Cependant l'énoncé de la question n'est pas forcement très clair....
si vous mettez
if(var1==10){
instruction
}
else if (var1>10){
instruction
}
else{
instruction
}
Ca devrait passer
Utilisateur anonyme
5 janv. 2017 à 11:11
5 janv. 2017 à 11:11
Bonjour
Le principe est bon, ce sont tes comparaisons qui posent un problème.
Tu compares des chaînes de caractères à des nombres. tes variables var1 et var2 sont donc des tableaux de char ou des pointeurs sur char, tu ne peux pas les comparer à des int.
Mais si tes var1 et var2 (et condition aussi, d'ailleurs) sont bien des int, il n'y a pas de raison que ça ne marche pas. Néanmoins, ton programme sera plus compréhensible si tu utilises l'écriture de yg_be.
Le principe est bon, ce sont tes comparaisons qui posent un problème.
Tu compares des chaînes de caractères à des nombres. tes variables var1 et var2 sont donc des tableaux de char ou des pointeurs sur char, tu ne peux pas les comparer à des int.
Mais si tes var1 et var2 (et condition aussi, d'ailleurs) sont bien des int, il n'y a pas de raison que ça ne marche pas. Néanmoins, ton programme sera plus compréhensible si tu utilises l'écriture de yg_be.
axteure
Messages postés
61
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
5 janv. 2017 à 11:39
5 janv. 2017 à 11:39
Bonjour merci pour vos réponses, un exemple plus concret pour que vous voyez comment ce présente mon programme.
L'exemple est une version light du programme.
L'exemple est une version light du programme.
int main()
{
char *condition[]={"t[i].table[i]==0","t[i].table[i]==1","t[i].table2[i]<100","t[i].table2[i]>=100"};
scanf("%i", &choix);
switch (choix)
{
case 0:
fonction(condition[choix]);
break;
case 1:
fonction(condition[choix]);
break;
case 2:
fonction(condition[choix]);;
break;
case 3:
fonction(condition[choix]);
break;
// ---- ERREUR ---- //
default:
printf("Vous n'avez pas rentre un nombre correct.\n\n");
break;
}
}
int fonction(valeur)
{
if(valeur){
instructions;
}
}
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
1 556
Modifié par yg_be le 5/01/2017 à 12:16
Modifié par yg_be le 5/01/2017 à 12:16
Si tu nous expliques pourquoi tu veux absolument travailler avec une table "condition", plutôt que programmer tes conditions, alors nous pourrons sans doute t'expliquer comment faire. Et ce ne sera peut-être pas simple.
Pourquoi ne pas faire:
Pourquoi ne pas faire:
case 0: fonction(t[i].table[i]==0); break;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
5 janv. 2017 à 12:01
5 janv. 2017 à 12:01
Non, aucune chance que ça marche comme ça. Ce n'est pas ce que tu avais dit.
Tu ne fais pas
condition = (t[i].table[i]==0);
mais
condition = "t[i].table[i]==0";
Ce qui n'a aucun rapport.
Dans le premier cas, l'expression t[i].table[i]==0 est évaluée, ce qui suppose d'ailleurs que les variables soient initialisées. Dans le second cas, condition est une simple chaîne de caractères. Au mieux, si les déclarations sont cohérentes, if (valeur) sera toujours vrai puisque valeur sera un pointeur sur une chaîne, donc pas zéro.
Tu ne fais pas
condition = (t[i].table[i]==0);
mais
condition = "t[i].table[i]==0";
Ce qui n'a aucun rapport.
Dans le premier cas, l'expression t[i].table[i]==0 est évaluée, ce qui suppose d'ailleurs que les variables soient initialisées. Dans le second cas, condition est une simple chaîne de caractères. Au mieux, si les déclarations sont cohérentes, if (valeur) sera toujours vrai puisque valeur sera un pointeur sur une chaîne, donc pas zéro.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 094
Modifié par [Dal] le 5/01/2017 à 19:40
Modifié par [Dal] le 5/01/2017 à 19:40
on pourrait éventuellement faire un tableau de pointeurs vers des fonctions de comparaison, et pour les appeler, il suffirait d'utiliser le pointeur contenu à l'indice du tableau, avec des paramètres génériques utilisables dans les différents cas
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 094
Modifié par [Dal] le 10/01/2017 à 09:58
Modifié par [Dal] le 10/01/2017 à 09:58
en faisant quelque chose comme cela, tu as effectivement un tableau de conditions, que tu peux tester en disposant juste de l'indice de la condition à tester :
Dal
#include <stdio.h> struct t { int truc; int machin; }; int (*condition[4]) (struct t t); int truc0(struct t t) { return t.truc == 0; } int truc1(struct t t) { return t.truc == 1; } int machin_petit(struct t t) { return t.machin < 100; } int machin_grand(struct t t) { return t.machin >= 100; } void fonction(int vrai, int choix) { if (vrai) printf("la condition %d est vraie\n", choix); else printf("la condition %d est fausse\n", choix); } int main(void) { struct t t; t.truc = 0; t.machin = 50; condition[0] = truc0; condition[1] = truc1; condition[2] = machin_petit; condition[3] = machin_grand; int choix = 2; fonction((*condition[choix]) (t), choix); return 0; }
Dal
axteure
Messages postés
61
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
9 janv. 2017 à 11:59
9 janv. 2017 à 11:59
Bonjour,
Merci de vos réponses. Quelle serait donc la solution ?
j'ai essayé ce code comme le propose yg_be mais ça ne fonctionne pas...
L'avantage d'utiliser la variable condition[choix] était que je pouvais faire une boucle for pour ma déclaration des cases. Mais l'utilisation de cette variable ne fonctionne pas.
Comme le père le dit, mon if est toujours vrai avec l'utilisation de cette variable condition[choix].
Merci de vos réponses. Quelle serait donc la solution ?
j'ai essayé ce code comme le propose yg_be mais ça ne fonctionne pas...
case 0:
fonction(t[i].table[i]==0);
break;
L'avantage d'utiliser la variable condition[choix] était que je pouvais faire une boucle for pour ma déclaration des cases. Mais l'utilisation de cette variable ne fonctionne pas.
Comme le père le dit, mon if est toujours vrai avec l'utilisation de cette variable condition[choix].
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
1 556
9 janv. 2017 à 16:24
9 janv. 2017 à 16:24
bonjour, "ça ne fonctionne pas": que vois-tu?
Bonjour
Surtout, comment est défini et initialisé ton tableau 't' et en particulier son champ 'table' ?
Tel que tu l'utilises, 't' serait un tableau de structures, chaque structure comprenant elle-même (entre autres ?) un tableau. Là où c'est très bizarre, c'est que tu utilises le même indice sur 't' et sur 'table' : un peu comme si tu avais défini un tableau à deux dimensions pour n'utiliser que la diagonale. Je me permets de douter que ce soit bien ça que tu veux faire.
Surtout, comment est défini et initialisé ton tableau 't' et en particulier son champ 'table' ?
Tel que tu l'utilises, 't' serait un tableau de structures, chaque structure comprenant elle-même (entre autres ?) un tableau. Là où c'est très bizarre, c'est que tu utilises le même indice sur 't' et sur 'table' : un peu comme si tu avais défini un tableau à deux dimensions pour n'utiliser que la diagonale. Je me permets de douter que ce soit bien ça que tu veux faire.