C qui peut m'expliquer le pourquoi ?? - C - Programmation
Marsh Posté le 21-04-2005 à 22:22:11
fullnight a écrit : le résultat à l'affichage est EDDE
|
*ch pointe vers un caractère.
Si tu veux afficher toute la chaine: %s au lieu de %c
Marsh Posté le 21-04-2005 à 22:24:22
je ne veux pas afficher toute la chaine !!
je veux afficher un caractère !
mais je ne comprend pas pq il me sort un DE
Marsh Posté le 21-04-2005 à 22:26:43
parce que mess pointe vers le debut de la chaine et que tu imprimes le caractère avant le debut de la chaine...
Marsh Posté le 21-04-2005 à 22:29:25
mais que fait donc *ch-1
ca n'a aucun sens
on est a l'élément [0] du vecteur
soit on décrémente le ptr et on passe a l'élément du vecteur v[-1] ( impossible )
soit on décrémente le caractère et on passe de E a D
t'es d'accord avec moi?
Marsh Posté le 21-04-2005 à 22:30:38
fullnight a écrit : ca n'a aucun sens |
c'est effectivement pour ca
Marsh Posté le 21-04-2005 à 22:31:35
on est d'accord pour le 1er D de EDDE
mais c'est le second que je ne comprend pas !!
Marsh Posté le 21-04-2005 à 22:34:34
c'est la meme chose
et pour info, v[-1] est possible
Marsh Posté le 21-04-2005 à 22:36:39
dans un vecteur on commence a zero
ca m'étonne qu'on puisse tripoter a -1
g jamais essayé mais soit, la n'est pas le problème..
si tu dis que c'est la même chose
alors le E est passé a D
par un phénomène de -1 du code ascii de la lettre E !
ce qui donne le D
et comme tu dis que c pareil
l'affichage suivant doit faire pareil.. cad -1 au code ascii de D
et donc afficher C !!
hors c pas le cas
pq??
Marsh Posté le 21-04-2005 à 22:37:58
fullnight a écrit : dans un vecteur on commence a zero |
arrete de boire...
Marsh Posté le 21-04-2005 à 22:39:21
jusqu'a preuve du contraire
tu n'as rien compris ni même rien expliqué de correct..puisque je n'ai toujours pas ma réponse.
j bois pas
Marsh Posté le 21-04-2005 à 22:39:35
explique moi pourquoi il devrait afficher "C"...
Marsh Posté le 21-04-2005 à 22:40:15
pas de problèmes je t'explique !
ca s'appelle suivre ton raisonnement
tu dis que c "pareil"
Marsh Posté le 21-04-2005 à 22:41:40
quand je dit c'est pareil je veux juste dire
(*ch-1) == *ch-1 |
Marsh Posté le 21-04-2005 à 22:42:02
ca se passe en 4 étapes : on démarre avec E
1/ *ch va afficher le premier E
2/ (*ch-1) va afficher E-1 donc D
3/ *ch-1 devrait faire D-1 donc C
4/ *ch devrait afficher C
Marsh Posté le 21-04-2005 à 22:42:30
je sais que c'est ce que tu voulais dire.
donc .. ca devrait ENCORE enlever 1 au caract.. mais il le fait pas
Marsh Posté le 21-04-2005 à 22:43:14
fullnight a écrit : ca se passe en 4 étapes : on démarre avec E |
Ca ne modifie pas *ch heh coco.
Marsh Posté le 21-04-2005 à 22:43:50
KangOl a écrit : parce que mess pointe vers le debut de la chaine et que tu imprimes le caractère avant le debut de la chaine... |
Non.
(*ch - 1) != *(ch - 1) |
Marsh Posté le 21-04-2005 à 22:43:59
whatde
ca modifie quoi alors?
Marsh Posté le 21-04-2005 à 22:44:00
fullnight a écrit : ca se passe en 4 étapes : on démarre avec E |
voila la différence : ca affiche, ca modifie pas...
Marsh Posté le 21-04-2005 à 22:44:46
ReplyMarsh Posté le 21-04-2005 à 22:44:55
Emmanuel Delahaye a écrit : Non.
|
effectivement, je me suis appercu de mon erreur apres et j'ai pas penser a éditer...
Marsh Posté le 21-04-2005 à 22:45:28
fullnight a écrit : mais que fait donc *ch-1 |
Pareil que (*ch) - 1
*ch retourne 'E'
'E' - 1 = 'D' (en ASCII)
Marsh Posté le 21-04-2005 à 22:45:55
elle va afficher mais elle ne modifie pas..??
keske c que cette histoire de parenthèses "préservante"??
please arretez de modifier ske j'ai tapé !
il s'agit de
(*ch-1)
puis de
*ch-1
Marsh Posté le 21-04-2005 à 22:46:26
fullnight a écrit : elle va afficher mais elle ne modifie pas..?? |
Va revoir un bon coup les pointeurs.
Marsh Posté le 21-04-2005 à 22:47:24
fullnight a écrit : elle va afficher mais elle ne modifie pas..?? |
c'est pas a cause, de parenthese...
c'est parce que tu ne fais aucune affectation... (ni de post/pré-incrémentation)
Marsh Posté le 21-04-2005 à 22:52:05
fullnight a écrit : dans un vecteur on commence a zero |
En C, on dit tableau (array)
Citation : ca m'étonne qu'on puisse tripoter a -1 |
Exact, c'est interdit, mais ce n'est pas ce que tu fais.
Citation : |
Exactement.
Citation : et comme tu dis que c pareil, l'affichage suivant doit faire pareil.. cad -1 au code ascii de D |
Ben non. Reprenons. Tu as une chaine
char s[] = "Ebp";
un pointeur char *p = s;
et tu te demandes ce que font:
|
C'est simple.
*p c'est comme p[0], c'est à dire 'E'
*p - 1 c'est comme p[0] - 1, c'est à dire 'D'
(*p - 1) c'est comme (p[0] - 1), c'est à dire 'D'
*p c'est comme p[0], c'est à dire 'E'
Aucun mystère là dedans.
Marsh Posté le 21-04-2005 à 22:57:52
t'es en train de me dire qu'il ne modifie pas le caractère pointé ( pas d'affectation )
pas d'affectation.. pas d'affectation..
cmt faire pour qu'il y'aie affectation ?
le fait de faire -1 a E je veux que ca écrase le D existant !
Marsh Posté le 21-04-2005 à 23:00:49
post/pre-incrémentation
Marsh Posté le 21-04-2005 à 23:07:17
donc j'aurais du faire soit un
++(*ch-1)
soit un
(*ch-1)++
mhhhhhh sans ca il modifie rien !
mais pour "juste afficher le caractere "modifié"" il doit bien modifier qqch quelque part?
y'aurait il une "copie" quelque part?
c étrange
Marsh Posté le 21-04-2005 à 23:09:06
c'est pas le contenu qu'il faut incrementer, c'est le pointeur...
Marsh Posté le 21-04-2005 à 23:10:25
si j'incrémente le pointeur je me déplace de case
c pas ca que je veux
moi je veux incrémenter ce que pointe le ptr
donc un nbre ! (le code ascii de la lettre )
Marsh Posté le 21-04-2005 à 23:13:15
*ch-2 alors et fait pas chier
Marsh Posté le 21-04-2005 à 23:17:34
dans un printf
*ch il y'a E dans la case et il affiche E
--(*ch) fait passer le E en D et affiche D
(*ch)-- fait passer le E en D et affiche E
*ch-1 affiche D alors qu'il y'a E dans la case
(*ch-1) affiche D alors qu'il y'a E dans la case
*(ch-1) affiche E alors qu'il y'a E dans la case ( quel intérêt de faire -1 alors?)
Marsh Posté le 21-04-2005 à 23:19:08
[quote]
KangOl a écrit : *ch-2 alors et fait pas chier |
reste cool dans ton slip y'en a qui ont du mal la comprendure
Marsh Posté le 21-04-2005 à 23:22:17
je sens naitre la tentation du comportement indéfini (ou défini par l'implémentation, j'ai un doute)
Code :
|
Marsh Posté le 21-04-2005 à 23:26:57
++fab a écrit : je sens naitre la tentation du comportement indéfini (ou défini par l'implémentation, j'ai un doute)
|
beuhhh ca donne CCDE
a ne pas faire je l'ai fait qd meme tiens
mais keske c que ces conneries
d'ou vient ce C !! il devait y avoir un E ca dépasse mes compétences de compréhension
Marsh Posté le 21-04-2005 à 23:37:12
Vous l'avez trouvé où celui là ?
Sinon les paramètres dune fonction sont évalués dans l'ordre défini par l'implémentation comme dit ci-dessus et dans ce cas c'est de droite à gauche.
Marsh Posté le 21-04-2005 à 22:18:41
le résultat à l'affichage est EDDE
mais pourquoi le deuxieme D ?????
et pourquoi le deuxieme E ???
Message édité par fullnight le 21-04-2005 à 23:44:16