Condition en C
Fermé
johan
-
17 nov. 2005 à 14:31
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 18 nov. 2005 à 12:39
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 18 nov. 2005 à 12:39
10 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
17 nov. 2005 à 14:35
17 nov. 2005 à 14:35
Salut,
Oui mais ça n'a pas beaucoup d'interêt puisque cette condition sera toujours vraie....
Oui mais ça n'a pas beaucoup d'interêt puisque cette condition sera toujours vraie....
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
17 nov. 2005 à 14:37
17 nov. 2005 à 14:37
oui, cela s'écri, mais c'est ridicule.
met if(1) ou mieu rien.
si a !='a' faux, ça veut dire a=='a' et donc que a!='e' est vrai. donc ton if est vérifié
si a!='a' vrai, ton if est vérifié. Donc quelque soit a ton if est vérifié.
à mon avis ça fait pas ce que tu voudrais ton truc.
met if(1) ou mieu rien.
si a !='a' faux, ça veut dire a=='a' et donc que a!='e' est vrai. donc ton if est vérifié
si a!='a' vrai, ton if est vérifié. Donc quelque soit a ton if est vérifié.
à mon avis ça fait pas ce que tu voudrais ton truc.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
17 nov. 2005 à 14:42
17 nov. 2005 à 14:42
Wep, je suppose que tu voulais utiliser des && (et logique) et non pas des || (ou logique)
mais si çà a de l'ntérêt , car j'ai écrit un programme qui remplace les e par des 3 , les a par des 4 , et les i par des 1 , donc j'ai mes 3 if ( a == 'a')
putchar('4') ...., et à la fin j'ai donc else if if ( a != 'a' || a != 'e' || a != 'i' )
, putchar(a) ...
putchar('4') ...., et à la fin j'ai donc else if if ( a != 'a' || a != 'e' || a != 'i' )
, putchar(a) ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tiens bizarre çà ne marche pas , regardez ce code :
ce qui est etrange c'est que ce programme est censé me remplacer les lettres... , et aux lieux de çà , j'ai çà , supposons que j'écrive :
salut petit scarabbe
on m'affiche çà:
s4alut p3et1t sc4ar4ab3eb3e
je devrais avoir :
s4lut p3t1t sc4r4b33
int a; while ((a=getchar()) != EOF) { if ( a == 'a' ) putchar('4'); if ( a == 'e' ) putchar('3'); if ( a == 'i' ) putchar('1'); else if ( a != 'a' || a != 'e' || a != 'i' ) putchar(a);
ce qui est etrange c'est que ce programme est censé me remplacer les lettres... , et aux lieux de çà , j'ai çà , supposons que j'écrive :
salut petit scarabbe
on m'affiche çà:
s4alut p3et1t sc4ar4ab3eb3e
je devrais avoir :
s4lut p3t1t sc4r4b33
wiwimagique
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
108
17 nov. 2005 à 15:35
17 nov. 2005 à 15:35
else if ( a != 'a' && a != 'e' && a != 'i' )
GallyNet
Messages postés
434
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
15 décembre 2008
387
17 nov. 2005 à 15:31
17 nov. 2005 à 15:31
Essaye voir avec ca :
if ( a == 'a' ) putchar('4'); else if ( a == 'e' ) putchar('3'); else if ( a == 'i' ) putchar('1'); else putchar(a);
Misdrhaal
Messages postés
49
Date d'inscription
lundi 9 mai 2005
Statut
Membre
Dernière intervention
23 février 2006
16
17 nov. 2005 à 15:34
17 nov. 2005 à 15:34
getchar : s
(position du getchar a)
putchar : '4' à la position du a (donc en position 2)
le a est alors en position 3.
tu refais un getchar a partir de a, donc il passe à l
et ainsi de suite
C'est pour ca que tes nombres apparaissent avant la lettre à remplacer...
Maintenant pourquoi tu ne remplaces pas?
A cause de tes if surement..
(position du getchar a)
putchar : '4' à la position du a (donc en position 2)
le a est alors en position 3.
tu refais un getchar a partir de a, donc il passe à l
et ainsi de suite
C'est pour ca que tes nombres apparaissent avant la lettre à remplacer...
Maintenant pourquoi tu ne remplaces pas?
A cause de tes if surement..
Misdrhaal
Messages postés
49
Date d'inscription
lundi 9 mai 2005
Statut
Membre
Dernière intervention
23 février 2006
16
17 nov. 2005 à 17:04
17 nov. 2005 à 17:04
Je vais etre plus clair alors :
Premier iteration :
lecture du s : putchar(s) , le getchar est positionné sur a
lecture du a : putchar(4)
Jusque la pas de problèmes mais maintenant ca se complique à cause de test if et oui quand on te dit de mettre des && à la place des || il ya une raison^^
démonstration
if(a=='a') //c'est le cas (d'ou la présence de ton 4)
if(a=='e') //c'est pas le cas
if(a=='i') //c'est pas le cas
else if
(a!='a' )// c'est pas le cas
|| (a!='e')// C'est le cas puisqu'actuellement il vaut 'a'
|| (a!='i') // C'est le cas puisqu'actuellement il vaut 'a'
Le test est TOUJOURS vrai et ne sert donc à rien, puisqu'à partir du moment où a possède une valeur, il est différent des autres, donc tu auras toujours deux tests vrais...
Donc deux solutions :
elles ont été mises au dessus donc je ne vais pas répéter...
quelques regles de logique de base quand meme:
a || b (pense à l'addition binaire sur un bit, en remplacant faux par 0 et vrai par 1) 1+1 = 1 1+0 = 0+1 = 1 0+0=0
a || b(pense à la multiplication, en remplacant faux par 0 et vrai par 1)
!a (0 devient 1 et 1devient 0)
a XoR B (soit l'un soit l'autre mais pas les deux en meme temps qu'ils soient vrais ou faux)
Donc si tu regardes ton test :
un élément était toujours vrai donc l'ensemble de l'expression était forcément vraie (1+ (1ou0) +(1ou0) ) = 1
Premier iteration :
lecture du s : putchar(s) , le getchar est positionné sur a
lecture du a : putchar(4)
Jusque la pas de problèmes mais maintenant ca se complique à cause de test if et oui quand on te dit de mettre des && à la place des || il ya une raison^^
démonstration
if(a=='a') //c'est le cas (d'ou la présence de ton 4)
if(a=='e') //c'est pas le cas
if(a=='i') //c'est pas le cas
else if
(a!='a' )// c'est pas le cas
|| (a!='e')// C'est le cas puisqu'actuellement il vaut 'a'
|| (a!='i') // C'est le cas puisqu'actuellement il vaut 'a'
Le test est TOUJOURS vrai et ne sert donc à rien, puisqu'à partir du moment où a possède une valeur, il est différent des autres, donc tu auras toujours deux tests vrais...
Donc deux solutions :
elles ont été mises au dessus donc je ne vais pas répéter...
quelques regles de logique de base quand meme:
a || b (pense à l'addition binaire sur un bit, en remplacant faux par 0 et vrai par 1) 1+1 = 1 1+0 = 0+1 = 1 0+0=0
a || b(pense à la multiplication, en remplacant faux par 0 et vrai par 1)
!a (0 devient 1 et 1devient 0)
a XoR B (soit l'un soit l'autre mais pas les deux en meme temps qu'ils soient vrais ou faux)
Donc si tu regardes ton test :
un élément était toujours vrai donc l'ensemble de l'expression était forcément vraie (1+ (1ou0) +(1ou0) ) = 1
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 nov. 2005 à 12:39
18 nov. 2005 à 12:39
bref tout le monde te dit que ton test est mauvais, tu peux nous croire.
Ou alors si tu es si sur de toi ça ert à rien de demander de l'aide.
Essai le conseil de killian et wiwimagique. Juste pour voir. Je pense que déjà ça ira mieux.
Ou alors si tu es si sur de toi ça ert à rien de demander de l'aide.
Essai le conseil de killian et wiwimagique. Juste pour voir. Je pense que déjà ça ira mieux.