Chaine de caractere en C [Résolu]

Signaler
Messages postés
18
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
12 décembre 2009
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

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(
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
18
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
12 décembre 2009

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 ?