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 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 10 janv. 2017 à 09:43
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 10 janv. 2017 à 09:43
A voir également:
- Variable condition dans if
- Excel cellule couleur si condition texte - Guide
- Excel condition ou - Guide
- Excel copier une cellule si condition ✓ - Forum Excel
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
7 réponses
yg_be
Messages postés
23522
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 avril 2025
Ambassadeur
1 578
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
23522
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 avril 2025
1 578
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
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
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
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
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
23522
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 avril 2025
1 578
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.