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
Bonjour , j'aimerais savoir si celà s'écrit en C :

if ( a != 'a' || a != 'e' || a != 'i' )

merci

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
Salut,

Oui mais ça n'a pas beaucoup d'interêt puisque cette condition sera toujours vraie....
1
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
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.
1
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
Wep, je suppose que tu voulais utiliser des && (et logique) et non pas des || (ou logique)
1
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) ...
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tiens bizarre çà ne marche pas , regardez ce code :

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
0
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
else if ( a != 'a' && a != 'e' && a != 'i' ) 

0
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
Essaye voir avec ca :

if ( a == 'a' )
putchar('4');
else if ( a == 'e' )
putchar('3');
else if ( a == 'i' )
putchar('1');
else
putchar(a);
0
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
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..
0
euh je n'ai absolument rien compris
0
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
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
0
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
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.
0