On Thu, 4 Mar 2004 21:45:45 +0100, "John Ramm" wrote:
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
normalement il devrait afficher:
arfyopbijoure
cependant ce n'est pas le cas. pq?
parce que la condition
a[i] != ' ' || a[i] != '/'
est toujours vraie pour n'importe quel a[i].
-- Horst
Anthony Fleury
John Ramm wrote:
Bonsoir
char const a[] = "arf yop/bijoure"; do { if ((a[i] != ' ') || (a[i] != '/')) printf("%c", a[i]); ++i; } while ((a[i] != 'e')); normalement il devrait afficher:
arfyopbijoure
Non ce n'est pas la sortie normale de ce bout de code. Tu lui demande d'afficher a[i] si ce caractère est différent d'un espace ou si il est différent d'un /.
pour le a le r et le f il est différent des deux, pour l'espace, il est différent de / donc il affiche l'espace, pour yop il est different des deux, et pour le / il est différent d'espace donc il affiche aussi le /.
En clair, tu voulais surement :
if(a[i] != ' ' && a[i] != '/') printf("%c", a[i]); La il faut qu'il soit différent de ' ' ET de '/' pour afficher le caractère.
Anthony -- "I should have seen it would be this way I should have known from the start what she's up to When you have loved and you've lost someone You know what it feels like to lose" -- The Rasmus
John Ramm wrote:
Bonsoir
char const a[] = "arf yop/bijoure";
do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
normalement il devrait afficher:
arfyopbijoure
Non ce n'est pas la sortie normale de ce bout de code.
Tu lui demande d'afficher a[i] si ce caractère est différent d'un espace ou
si il est différent d'un /.
pour le a le r et le f il est différent des deux, pour l'espace, il est
différent de / donc il affiche l'espace, pour yop il est different des
deux, et pour le / il est différent d'espace donc il affiche aussi le /.
En clair, tu voulais surement :
if(a[i] != ' ' && a[i] != '/') printf("%c", a[i]);
La il faut qu'il soit différent de ' ' ET de '/' pour afficher le caractère.
Anthony
--
"I should have seen it would be this way
I should have known from the start what she's up to
When you have loved and you've lost someone
You know what it feels like to lose" -- The Rasmus
char const a[] = "arf yop/bijoure"; do { if ((a[i] != ' ') || (a[i] != '/')) printf("%c", a[i]); ++i; } while ((a[i] != 'e')); normalement il devrait afficher:
arfyopbijoure
Non ce n'est pas la sortie normale de ce bout de code. Tu lui demande d'afficher a[i] si ce caractère est différent d'un espace ou si il est différent d'un /.
pour le a le r et le f il est différent des deux, pour l'espace, il est différent de / donc il affiche l'espace, pour yop il est different des deux, et pour le / il est différent d'espace donc il affiche aussi le /.
En clair, tu voulais surement :
if(a[i] != ' ' && a[i] != '/') printf("%c", a[i]); La il faut qu'il soit différent de ' ' ET de '/' pour afficher le caractère.
Anthony -- "I should have seen it would be this way I should have known from the start what she's up to When you have loved and you've lost someone You know what it feels like to lose" -- The Rasmus
Emmanuel Delahaye
In 'fr.comp.lang.c', "John Ramm" wrote:
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
normalement il devrait afficher:
arfyopbijoure
cependant ce n'est pas le cas. pq?
Parce que l'équation booleenne est fausse.
if (a[i] != ' ' && a[i] != '/')
ou
if (!(a[i] != ' ' || a[i] != '/'))
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "John Ramm" <john.ramm@hotmail.com> wrote:
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure";
do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
normalement il devrait afficher:
arfyopbijoure
cependant ce n'est pas le cas. pq?
Parce que l'équation booleenne est fausse.
if (a[i] != ' ' && a[i] != '/')
ou
if (!(a[i] != ' ' || a[i] != '/'))
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Régis Troadec
Salut,
"John Ramm" a écrit dans le message de news: 404794ac$
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
Precision :
Si tu veux afficher le e a la fin, ce n'est pas bon, qd l'expression du while est evaluee lorsque l'on arrive sur la lettre e, celle-ci devient fausse, par consequent, tu manques un tour de boucle. Si c'est toute la chaine que tu veux traiter, utilise le caractere de fin de chaine ' ' (zero, pas o) ajouté implicitement a l'initialisation du tableau a :
char const a[] = "arf yop/bijoure";
do { if ( (a[i] != ' ') && (a[i] != '/') ) { printf("%c", a[i]); } ++i; } while ((a[i] != ' '));
Regis
Salut,
"John Ramm" <john.ramm@hotmail.com> a écrit dans le message de news:
404794ac$1@epflnews.epfl.ch...
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure";
do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
Precision :
Si tu veux afficher le e a la fin, ce n'est pas bon,
qd l'expression du while est evaluee lorsque l'on arrive sur
la lettre e, celle-ci devient fausse, par consequent, tu manques un
tour de boucle.
Si c'est toute la chaine que tu veux traiter, utilise le caractere de fin de
chaine ' '
(zero, pas o) ajouté implicitement a l'initialisation du tableau a :
char const a[] = "arf yop/bijoure";
do {
if ( (a[i] != ' ') && (a[i] != '/') )
{
printf("%c", a[i]);
}
++i;
} while ((a[i] != ' '));
"John Ramm" a écrit dans le message de news: 404794ac$
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
Precision :
Si tu veux afficher le e a la fin, ce n'est pas bon, qd l'expression du while est evaluee lorsque l'on arrive sur la lettre e, celle-ci devient fausse, par consequent, tu manques un tour de boucle. Si c'est toute la chaine que tu veux traiter, utilise le caractere de fin de chaine ' ' (zero, pas o) ajouté implicitement a l'initialisation du tableau a :
char const a[] = "arf yop/bijoure";
do { if ( (a[i] != ' ') && (a[i] != '/') ) { printf("%c", a[i]); } ++i; } while ((a[i] != ' '));
Regis
Marc Lasson
John Ramm wrote:
Tu voulais certainement faire :
if ((a[i] != ' ') && (a[i] != '/'))
Je vais tenter d'expliquer, mais ca risque d'être barbant.
Si dans la case il n'y a pas espace (A) OU s'il n'y a pas un slash (B), Alors afficher son contenu.
si on a un espace A est vrai et B est faux, donc (A ou B) est vrai, donc on affiche. si on a un slash A est faux et B est vrai, donc (A ou B) est vrai, donc on affiche. si on a un autre caractere, A et B sont vrais, donc (A ou B) est vrai, donc on affiche.
bah c'est quand qu'on affiche pas ? c'est quand A ET B sont faux. C'est-à-dire quand la case contient un espace et qu'elle contient un slash. Mais elle ne contient jamais les deux, donc ce cas ne se produit jamais.
Au [tout] debut quand on a un peu de mal avec la logique, on peut faire ce qu'on appelle une table de vérité.
A : "la case ne contient pas un espace" (a[i] != ' ') B : "la case ne contient pas un slash" (a[i] != '') C : "la case doit etre affichée" (ce qu'il y a dans le if)
(V pour Vrai et F pour Faux)
A | B | C --------- V | V | V On reconnait l'opération logique ET, V | F | F donc C = A ET B. F | V | F F | F | F C'est pourquoi il faut utiliser && et non ||.
-- Marc.
John Ramm wrote:
Tu voulais certainement faire :
if ((a[i] != ' ') && (a[i] != '/'))
Je vais tenter d'expliquer, mais ca risque d'être barbant.
Si dans la case il n'y a pas espace (A) OU s'il n'y a pas un slash (B),
Alors afficher son contenu.
si on a un espace A est vrai et B est faux, donc (A ou B) est vrai, donc
on affiche.
si on a un slash A est faux et B est vrai, donc (A ou B) est vrai, donc
on affiche.
si on a un autre caractere, A et B sont vrais, donc (A ou B) est vrai,
donc on affiche.
bah c'est quand qu'on affiche pas ? c'est quand A ET B sont faux.
C'est-à-dire quand la case contient un espace et qu'elle contient un
slash. Mais elle ne contient jamais les deux, donc ce cas ne se produit
jamais.
Au [tout] debut quand on a un peu de mal avec la logique, on peut
faire ce qu'on appelle une table de vérité.
A : "la case ne contient pas un espace" (a[i] != ' ')
B : "la case ne contient pas un slash" (a[i] != '')
C : "la case doit etre affichée" (ce qu'il y a dans le if)
(V pour Vrai et F pour Faux)
A | B | C
---------
V | V | V On reconnait l'opération logique ET,
V | F | F donc C = A ET B.
F | V | F
F | F | F C'est pourquoi il faut utiliser && et non ||.
Si dans la case il n'y a pas espace (A) OU s'il n'y a pas un slash (B), Alors afficher son contenu.
si on a un espace A est vrai et B est faux, donc (A ou B) est vrai, donc on affiche. si on a un slash A est faux et B est vrai, donc (A ou B) est vrai, donc on affiche. si on a un autre caractere, A et B sont vrais, donc (A ou B) est vrai, donc on affiche.
bah c'est quand qu'on affiche pas ? c'est quand A ET B sont faux. C'est-à-dire quand la case contient un espace et qu'elle contient un slash. Mais elle ne contient jamais les deux, donc ce cas ne se produit jamais.
Au [tout] debut quand on a un peu de mal avec la logique, on peut faire ce qu'on appelle une table de vérité.
A : "la case ne contient pas un espace" (a[i] != ' ') B : "la case ne contient pas un slash" (a[i] != '') C : "la case doit etre affichée" (ce qu'il y a dans le if)
(V pour Vrai et F pour Faux)
A | B | C --------- V | V | V On reconnait l'opération logique ET, V | F | F donc C = A ET B. F | V | F F | F | F C'est pourquoi il faut utiliser && et non ||.
-- Marc.
Régis Troadec
Salut,
"Emmanuel Delahaye" a écrit dans le message de news:
In 'fr.comp.lang.c', "John Ramm" wrote:
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
normalement il devrait afficher:
arfyopbijoure
cependant ce n'est pas le cas. pq?
Parce que l'équation booleenne est fausse.
if (a[i] != ' ' && a[i] != '/')
ou
if (!(a[i] != ' ' || a[i] != '/'))
Oups, mauvaise application du theoreme de De Morgan, tu voulais dire ( !( !(a[i] != ' ') || !(a[i] != '/') ) )
Regis
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Salut,
"Emmanuel Delahaye" <emdelYOURBRA@noos.fr> a écrit dans le message de news:
Xns94A2E6EFD65C0hsnoservernet@212.27.42.66...
In 'fr.comp.lang.c', "John Ramm" <john.ramm@hotmail.com> wrote:
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure";
do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
normalement il devrait afficher:
arfyopbijoure
cependant ce n'est pas le cas. pq?
Parce que l'équation booleenne est fausse.
if (a[i] != ' ' && a[i] != '/')
ou
if (!(a[i] != ' ' || a[i] != '/'))
Oups, mauvaise application du theoreme de De Morgan,
tu voulais dire ( !( !(a[i] != ' ') || !(a[i] != '/') ) )
Regis
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
j'ai un comportement bizarre d'un programme.. [...]
Parce que l'équation booleenne est fausse.
if (a[i] != ' ' && a[i] != '/')
ou
if (!(a[i] != ' ' || a[i] != '/')) Lapsus :
if (!(a[i] == ' ' || a[i] == '/'))
Yves ROMAN
Salut,
"John Ramm" a écrit dans le message de news: 404794ac$
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
Precision :
Si tu veux afficher le e a la fin, ce n'est pas bon, qd l'expression du while est evaluee lorsque l'on arrive sur la lettre e, celle-ci devient fausse, par consequent, tu manques un tour de boucle. Si c'est toute la chaine que tu veux traiter, utilise le caractere de fin de chaine ' ' (zero, pas o) ajouté implicitement a l'initialisation du tableau a :
char const a[] = "arf yop/bijoure";
do { if ( (a[i] != ' ') && (a[i] != '/') ) { printf("%c", a[i]); } ++i; } while ((a[i] != ' '));
Si la chaine est vide, tu risques de déborder. (Au fait, ca donne quoi printf("%c",0) ?)
"John Ramm" <john.ramm@hotmail.com> a écrit dans le message de news:
404794ac$1@epflnews.epfl.ch...
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure";
do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
Precision :
Si tu veux afficher le e a la fin, ce n'est pas bon,
qd l'expression du while est evaluee lorsque l'on arrive sur
la lettre e, celle-ci devient fausse, par consequent, tu manques un
tour de boucle.
Si c'est toute la chaine que tu veux traiter, utilise le caractere de fin de
chaine ' '
(zero, pas o) ajouté implicitement a l'initialisation du tableau a :
char const a[] = "arf yop/bijoure";
do {
if ( (a[i] != ' ') && (a[i] != '/') )
{
printf("%c", a[i]);
}
++i;
} while ((a[i] != ' '));
Si la chaine est vide, tu risques de déborder.
(Au fait, ca donne quoi printf("%c",0) ?)
"John Ramm" a écrit dans le message de news: 404794ac$
Bonjour,
j'ai un comportement bizarre d'un programme..
char const a[] = "arf yop/bijoure"; do {
if ((a[i] != ' ') || (a[i] != '/'))
printf("%c", a[i]);
++i;
} while ((a[i] != 'e'));
Precision :
Si tu veux afficher le e a la fin, ce n'est pas bon, qd l'expression du while est evaluee lorsque l'on arrive sur la lettre e, celle-ci devient fausse, par consequent, tu manques un tour de boucle. Si c'est toute la chaine que tu veux traiter, utilise le caractere de fin de chaine ' ' (zero, pas o) ajouté implicitement a l'initialisation du tableau a :
char const a[] = "arf yop/bijoure";
do { if ( (a[i] != ' ') && (a[i] != '/') ) { printf("%c", a[i]); } ++i; } while ((a[i] != ' '));
Si la chaine est vide, tu risques de déborder. (Au fait, ca donne quoi printf("%c",0) ?)