Affichage 3 premiers caractere

othkreen Messages postés 5 Date d'inscription samedi 12 mai 2007 Statut Membre Dernière intervention 30 septembre 2007 - 13 mai 2007 à 00:47
othkreen Messages postés 5 Date d'inscription samedi 12 mai 2007 Statut Membre Dernière intervention 30 septembre 2007 - 13 mai 2007 à 05:54
bonjour a tous,

je suis en train d'ecrire une petite fonction en C qui affiche les 3 premiers caracteres des chaine de caracteres (sans un utiliser des fonctions  de la bibliotheque string.h) contenu dans un tableau statique.

voici la déclaration:  char* jour[7].    ainsi,    jour[0]="lundi", jour[1]="mardi"...

au lieu d'afficher lundi, mardi, mercdri.... dimanche. je voudrais afficher  lun, mar....dim

mais j'arrive pas.  lorsque j'execute lpar exemple l'instruction printf("%s", jour[6]+3), il efface plutot les 3 premiers carcarteres pour m'affcicher "anche"

pouvez vous m'aider?

merci d'avance

5 réponses

Utilisateur anonyme
13 mai 2007 à 01:13
#include <stdio.h>
#include <windows.h>


char* jour[7];


int main(void)
{
       jour[0]="lundi";
       jour[1]="mardi";
       jour[2]="mercredi";
       jour[3]="jeudi";
       jour[4]="vendredi";
       jour[5]="samedi";
       jour[6]="dimance";
 
       printf("%c%c%c", jour[6][0], jour[6][1], jour[6][2]);
 
       Sleep(100000);
}



MaLaDeDeDe 97one 
Utilisateur anonyme
13 mai 2007 à 01:33
printf("%s", jour[6]+3), c'est comme si tu avais écrit printf("%s", jour[6][3]).

MaLaDeDeDe 97one 
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
13 mai 2007 à 01:54
/* autre alternative */





#include






<stdio.h>



/* printf() */




/* optionnel */
#define
DIMANCHE   0


#define
LUNDI             1


#define
MARDI           2


#define
MERCREDI    3


#define
JEUDI              4


#define
VENDREDI     5


#define
SAMEDI         6





/* pourrait être dynamique pour différentes langues */


static





struct


{



    const





char

* nomLong;



    const





char

* nomCourt;
}jours[

/* 0-6 */
] =
    {
        {

"dimanche"
,

"dim"
},
        {

"lundi"
,

"lun"
},
        {

"mardi"
,

"mar"
},
        {

"mercredi"
,

"mer"
},
        {

"jeudi"
,

"jeu"
},
        {

"vendredi"
,

"ven"
},
        {

"samedi"
,

"sam"
}
    };





/* pas vraiment utile puisqu'il y a toujours 7 jours dans une semaine  =_= */

#define
NOMBRE_DE_JOUR  (


sizeof

(jours) /


sizeof

(jours[ 0 ]))





int

main()
{



    int

i;





    for

(i = 0; i < NOMBRE_DE_JOUR; i++)
    {
        printf(

"%d) %s (%s)\n"
, i, jours[ i ].nomLong, jours[ i ].nomCourt);
    }
    printf(

"\n%s\n"
, jours[ MERCREDI ].nomLong);





    return

0;
}
je crois que c'est assez clair, pas la peine de commenter?

pour maladededadedido.... moi j'irais plutôt avec un « char * jours[7] = {..., ..., ...}; » ou un « const * jours[] = {...}; », etc. peu importe ... assignation dès la déclaration, et constant ...

printf("%s", jour[6]+3) << en fait ce que tu fais c'est que tu te déplaces de 3 casses vers la droite, donc tu sautes les trois premiers caractères, ton « jour[6] » est une chaine « char * »

<gras>char
* chaine = "dimanche";
puts(chaine + 3); /* affiche: anche */

et c'est normal puisque tu demandes d'aller 3 casses vers la droite ... (une chaine de caractères est une « suite » de caractères)

chaine[0] = 'd'
chaine[1] = 'i'
chaine[2] = 'm'
chaine[3] = ???
...
*(chaine+3) chaine[3] 'a'

~(.:: NitRic ::.)~
Utilisateur anonyme
13 mai 2007 à 01:58
ok pas mal ton code :)

MaLaDeDeDe 97one 

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

Posez votre question
othkreen Messages postés 5 Date d'inscription samedi 12 mai 2007 Statut Membre Dernière intervention 30 septembre 2007
13 mai 2007 à 05:54
merci pour le code, il m'a permis de comprendre quelques notions.
Rejoignez-nous