Chaine de caractere en C

Résolu
cs_YURIX Messages postés 18 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 12 décembre 2009 - 27 mars 2006 à 01:35
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 27 mars 2006 à 02:08
J'ai un probléme avec une chaine de caractere

char choix1;
printf("Test des axes L,T et V : AX\n");
printf("\nVotre choix :");

scanf("%s", choix1);

if(choix1 == 'AX') {...}

Comment assigner plusieurs caractères ( AX ici) ?
J'ai beau chercher je ne trouve pas...
Merci à tous !

5 réponses

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
27 mars 2006 à 01:47
choix1 doit être un pointeur pour qui pointe sur le premier élément mémoire d'une chaine de caractère, donc un pointeur désingné comme : char choix1[50]; ou un pointeur pour allocation dynamique. Chaque chaine se termine avec 0 comme caractère (géré automatiquement par scanf() et autres fonctions de traitement de chaine.

Ensuite pour vérifier ta condition c'est "ax" et non pas '' car 'ax' est pour un seul caractère, et encore ce n'est pas bon il faut utiliser une fonction du C pour comparer deux chaines ce qui donne :

char choix1[50];
printf("Test des axes L,T et V : AX\n");
printf("\nVotre choix :");

scanf("%s", choix1);

if(strcmp(choix1, "AX") == 0) {...}

Le 0 veux dire identique.

A+ Bonne prog

http://vbaddons.free.fr
MSN : x_men_40(
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 mars 2006 à 02:08
char[1] devra contenir un 0, il ne te restera donc qu'1 place en char[0] pour n'y mettre qu'1 seul caractère.
A toi de voir mais en aucun cas ne pourra trouver une équivalence avec "AX".

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 mars 2006 à 01:47
choix1 ne pourra JAMAIS être une chaine, c'est un char (8 bits) tout juste assez pour contenir le 0 final d'une chaine.

char choix1[48]; // PAR EXEMPLE, 48 octets pour une chaine

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 mars 2006 à 01:50
OUPS, devancé.

Prenez l'habitude de mettre des multiples de 4 sur les réservations de taille de variable, c'est l'alignement correct sur system 32 bits. Il est clair que le compilo aura transformé le char[50] en 52 mais autant coder proprement, c'est juste une bonne habitude à prendre.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0

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

Posez votre question
cs_YURIX Messages postés 18 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 12 décembre 2009
27 mars 2006 à 02:01
Merci beaucoup pour vos réponses aussi rapide !
C'est strcmp que je connaissai pas.
Sinon question : char[2] aurait-il suffit dans mon exemple ?
0
Rejoignez-nous