Language C
dancingmad
-
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
dans un soucis de clarification d'un code source en C, je cherche a definir une constante, LG_STR, qui represente la longueur d'une chaine de caractere standard. Je l'ai donc naturellement definie comme ceci:
#define LG_STR 32
et j'ai remplac'e le nombre 32 par LG_STR dans tout le prog.
Le probleme est que je n'arrive pas a le faire directement dans un scanf:
char s[LG_STR];
scanf("%LG_STRs",s); /* ne compile pas */
et j'ai beau chercher, je ne trouve pas la synthaxe a utiliser pour le faire.
J'ai pens'e creeer une fonction qui renvoie la bonne chaine de caractere, avec un fscanf, mais je voudrais que l'operation se fasse a la compilation. Y a-t-il un moyen ?
Merci d'avance.
ps: desol'e pour les accents, clavier qwerty oblige...
dans un soucis de clarification d'un code source en C, je cherche a definir une constante, LG_STR, qui represente la longueur d'une chaine de caractere standard. Je l'ai donc naturellement definie comme ceci:
#define LG_STR 32
et j'ai remplac'e le nombre 32 par LG_STR dans tout le prog.
Le probleme est que je n'arrive pas a le faire directement dans un scanf:
char s[LG_STR];
scanf("%LG_STRs",s); /* ne compile pas */
et j'ai beau chercher, je ne trouve pas la synthaxe a utiliser pour le faire.
J'ai pens'e creeer une fonction qui renvoie la bonne chaine de caractere, avec un fscanf, mais je voudrais que l'operation se fasse a la compilation. Y a-t-il un moyen ?
Merci d'avance.
ps: desol'e pour les accents, clavier qwerty oblige...
A voir également:
- Language C
- Windows display language french - Guide
- Vistalizator language pack windows 7 - Télécharger - Traduction
- Language binaire - Guide
- Photoshop cs6 french language pack - Forum Photoshop
- Autocad 2008 language pack french - Forum AutoCAD
5 réponses
Le premier argument de scanf, qui précise le type de ce qui sera entré, c'est soit %s (chaine de caractère), %d (pour un entier), %f (flottant) etc... Mais dans ton code ça donne %32 ce qui n'a pas de sens. Remplace %LG_STR par %s
Ah oui d'accord, faut faire précéder ta variable du signe dièse pour la conversion d'une constante préprocesseur en chaine:
Ce qui donnera après le traitement du préprocesseur:
Ce qui donnera après le passage du compilateur:
Voilà ça devrait marcher.
scanf("%" #LG_STR "s",s);
Ce qui donnera après le traitement du préprocesseur:
scanf("%" "32" "s",s);
Ce qui donnera après le passage du compilateur:
scanf("%32s",s);
Voilà ça devrait marcher.
J'avour que je suis pas trop sûr de moi sur ce coup là. Sinon essaie ça:
#define MON_PRINTF(l,s) printf("%" #l "s", s) MON_PRINTF(#LG_STR, chaine);
Merci beaucoup !
C'est la 2e solution qui marche. Et on peut mettre ou non le # devant LG_STR dans l'appel de la macro.
C'est la 2e solution qui marche. Et on peut mettre ou non le # devant LG_STR dans l'appel de la macro.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ce que je veux, c'est juste ecrire
scanf("%xxs",s);
avec la valeur decimale de xx egale a LG_STR, sans avoir a l'entrer a la main.