Problème de lecture chaine caractère - C++ - Programmation
Marsh Posté le 05-12-2002 à 01:41:01
Rappel :
char annee[4] reserve un tableau de 4 caractères. Donc avec le '\0' terminal, cela te laisse 3 caractères au choix
Marsh Posté le 05-12-2002 à 02:36:11
Salut,
même en dimensionnant le tableau Annee à 5 ça foire toujours
Marsh Posté le 05-12-2002 à 03:01:28
il me semble qu'un tableau en C inclu l'indice zéro
donc quand je tape Annee[4] ça signifie l'ensemble des indices allant de 0 à 4, donc bien 5 caractères:
Annee[0]
Annee[1]
Annee[2]
Annee[3]
Annee[4]
aidez moi je ne vois toujours pas où est l'erreur dans le code source
Marsh Posté le 05-12-2002 à 09:39:43
Elbarto a écrit a écrit : il me semble qu'un tableau en C inclu l'indice zéro donc quand je tape Annee[4] ça signifie l'ensemble des indices allant de 0 à 4, donc bien 5 caractères: Annee[0] Annee[1] Annee[2] Annee[3] Annee[4] aidez moi je ne vois toujours pas où est l'erreur dans le code source |
Ah la la, ne pas vouloir reconnaitres ses erreurs
Et quand tu fais int tableau[4]; il inclue aussi un zero terminal le C ?
Marsh Posté le 05-12-2002 à 09:41:39
Elbarto a écrit a écrit : il me semble qu'un tableau en C inclu l'indice zéro donc quand je tape Annee[4] ça signifie l'ensemble des indices allant de 0 à 4, donc bien 5 caractères: Annee[0] Annee[1] Annee[2] Annee[3] Annee[4] |
non, 0 à taille-1
Marsh Posté le 05-12-2002 à 16:09:51
en C un tableau commence toujours a l'indice 0
donc tab[4] est un tableau a 5entrée
Moi je te conseil de faire des memset pour initialiser tes tableau au depart.Deja ca evitera des merdes.
apres debug bien ton prog ton erreur est forcément quelque part
Marsh Posté le 05-12-2002 à 16:11:35
ton printf de ton tableau tu le fait avant année[4]='/0' ou aprés?
Marsh Posté le 05-12-2002 à 16:13:33
acidman a écrit a écrit : en C un tableau commence toujours a l'indice 0 donc tab[4] est un tableau a 5entrée |
On parle bien du même langage ?
Dans ma version du C et du C++ tab[4] = 4 éléments, 0 à 3
Marsh Posté le 05-12-2002 à 16:23:38
acidman a écrit a écrit : ton printf de ton tableau tu le fait avant année[4]='/0' ou aprés? |
je suis débutant en C, le printf je le fais sur la variable Année,
ainsi:
printf("Année:%s",Annee);
si on tape cette commande tout de suite après cette partie:
Code :
|
ben ça marche, mais si je retape plus tard la ligne "printf("Année:%s",Annee);" ben là ça marchera plus, notamment en fin de programme lorsque je tape la commande:
Code :
|
antp a écrit a écrit : On parle bien du même langage ? Dans ma version du C et du C++ tab[4] = 4 éléments, 0 à 3 |
il me semble bien qu'un tableau en C commence toujours par l'indice zéro,
mais après je ne sais plus si le chiffre indiqué à la déclaration du tableau correspond à la dernier valeur de l'indice ou bien au total des indices incluant le zéro ?
le langage utilisé est bien un C classique standard qui marche avec tout bon compilateur C ( Dev C++, le vieux turbo Borland C++, n'importe quel compilateur )
j'attends vos réponses
Marsh Posté le 05-12-2002 à 16:38:28
antp a écrit a écrit : On parle bien du même langage ? Dans ma version du C et du C++ tab[4] = 4 éléments, 0 à 3 |
c'est ca
Marsh Posté le 05-12-2002 à 16:41:54
quand tu fais ta declaration :
Code :
|
tu declares un tableau de quatre caracteres :
annee[0] (1er caractère)
annee[1] (2eme)
annee[2](3eme)
annee[3] (4eme)
ensuite
Mois[2]='\0'; //à ce niveau si on inclu dans ce code la commande pour afficher la variable Annee on se rend compte que la variable est vide ce qui est incompréhensible
pas forcemement. par un effet de bord il se peut que Mois[2] soit Annee[0] ( les variables sont declarées cotes a cotes donc il se peut qu'il en soit de mm pour l'allocation memoire - me semble-t-il) : donc annee serait ainsi :"'\0'XXX" donc il n'y a rien a afficher ( je m'avance peut-etre).
enfin voila
Marsh Posté le 05-12-2002 à 16:44:03
antp a écrit a écrit : On parle bien du même langage ? Dans ma version du C et du C++ tab[4] = 4 éléments, 0 à 3 |
Franchement les modos ca raconte n'importe quoi
Marsh Posté le 05-12-2002 à 16:44:29
antp a écrit a écrit : On parle bien du même langage ? Dans ma version du C et du C++ tab[4] = 4 éléments, 0 à 3 |
je confirme aussi, c'est bien ça.
Marsh Posté le 05-12-2002 à 16:44:39
Zion a écrit a écrit : Franchement les modos ca raconte n'importe quoi |
Marsh Posté le 05-12-2002 à 16:45:13
Zion a écrit a écrit : Franchement les modos ca raconte n'importe quoi |
Marsh Posté le 05-12-2002 à 16:47:00
Ok un grand merci les gars, grace à vous tous j'ai trouvé pourquoi ça foirait
en effet tout venait de ma confusion sur la taille d'un tableau en C, en fait quand on déclare un tableau du style tab[n] moi je pensais qu'il y avait des indices allant de 0 à n alors qu'en réalité les indices vont de 0 à n-1
voici donc le listing corrigé qui marche grace à vous:
Code :
|
bon c'est pas très propre comme code, un peu lourd et il y a surement des possibilités pour simplifier mais bon je suis débutant en C
Marsh Posté le 05-12-2002 à 16:48:34
|
Marsh Posté le 05-12-2002 à 16:54:32
drasche a écrit a écrit : je confirme aussi, c'est bien ça. |
t'es vraiment sur?
parce qu'antp, c un programmeur pascal, il comprends rien au c++
Marsh Posté le 05-12-2002 à 16:55:17
Zion a écrit a écrit : t'es vraiment sur? parce qu'antp, c un programmeur pascal, il comprends rien au c++ |
vilain trolleur
au fait toi aussi tu programmes un pascal
Marsh Posté le 05-12-2002 à 16:58:04
drasche a écrit a écrit : au fait toi aussi tu programmes un pascal |
Oui, mais je n'affirme pas des erreurs sous couvert de mon
mandat de modo moi
Marsh Posté le 05-12-2002 à 17:04:52
Elbarto a écrit a écrit : bon c'est pas très propre comme code, un peu lourd et il y a surement des possibilités pour simplifier mais bon je suis débutant en C |
genre comme ca
Code :
|
en prenant garde au fait que strtok est destructeur ... la chaine passée est fichue, il faut donc en faire une copie si on souhaite la conserver
Marsh Posté le 05-12-2002 à 17:17:27
Zion a écrit a écrit : Franchement les modos ca raconte n'importe quoi |
Marsh Posté le 06-12-2002 à 03:38:56
Encore un qui multiplie ses chances de réponses: http://www.developpez.net/forums/viewtopic.php?t=45517
Mais quel besoin de copier dans tout les sens ?
Code :
|
Il me semble que le format de date américain est MM/DD/YYYY.
Marsh Posté le 06-12-2002 à 10:27:06
ReplyMarsh Posté le 06-12-2002 à 10:27:54
tres bien si tu as corriger ton probleme mais ceci dit je te conseil de prendre l'habitude d'initialiser tout tes tableau avec memset et fait le systématiquement car bien souvent cela evite beaucoup de probleme.
Marsh Posté le 07-12-2002 à 02:06:21
Pour que ça ne fasse pas d'erreur si on se sert de son contenu sans y avoir mis quelque chose ?
Ça reste discutable.
Pour moi il est erroné d'initialiser "par prudence" une variable. Ça empêche justement le compilateur de signaler les oublis.
Ou alors utiliser une valeur boguée exprès.
Et puis bon, memset, une taille, une occasion de se gourer...
Pour initialiser un tableau à 0, utiliser ={};.
Marsh Posté le 05-12-2002 à 01:19:42
Salut,
j'ai un exercice en C qui me donne des soucis car il y a une variable chaine qui ne s'affiche pas comme prévu,
l'exercice consiste à entrer sous format américain une date ( par exemple 2002/12/04 )
puis le programme convertit alors la date sous format français en texte:
"nous sommes le 4 décembre 2002"
le problème c'est que l'année n'est pas affichée, je vous montre le code, tout à l'air correct mais à la fin la variable "Annee" ne contient pas de valeur alors qu'au début elle avait bien la valeur extraite depuis le tableau "Date":
aidez moi à trouver ce qui cloche dans ce programme SVP
Merci
Message édité par Elbarto le 05-12-2002 à 16:24:21