Partage
  • Partager sur Facebook
  • Partager sur Twitter

Discussions sur la FAQ du forum de C

Pas celle sur les bibliothèques tierces.

10 mai 2010 à 14:29:13

Bonjour à tous,

Je poste ici au sujet de la quesion [3][3] Comment récupérer la valeur ASCII d'un caractère.

En effet l'exemple donné pour récupérer le code ASCII d'un caractère est le suivant :

unsigned char c = 'é'; /* Ici on veut récupérer la valeur de é */

printf("%ld", (long int) c);


Or le 'é' ne fait pas parti du jeu de caractère ASCII standard mais du jeu de caractère ASCII étendu. Sa valeur ne peut donc normalement pas être contenue dans une constante de type caractère (char) mais dans une constante de type caractère étendu (wchar_t).

Le bon code ne serait-il donc pas plutôt le suivant ?

int c = L'é'; /* Ici on veut récupérer la valeur de é */

printf("%d", c);


Car avec le code proposé, gcc me renvoie ce warning :

main.c:7:20: warning: multi-character character constant


et j'ai droit à 169 comme valeur de retour.

  • Partager sur Facebook
  • Partager sur Twitter
10 mai 2010 à 17:51:10

Mettre un L devant signifie que tu as un caractère larges (je me souvient plus le nom exact). Donc si tu mets L il faut utiliser les wchar_t.

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main(void) {
  wchar_t a = L'a';
  wprintf(L"%d", a);
  return EXIT_SUCCESS;
}

97

Mais si, sur ta machine, tu n'as pas de 'é' dans la table ASCII, tu ne pourras pas récupérer quelque chose de correct. :)
  • Partager sur Facebook
  • Partager sur Twitter
10 mai 2010 à 20:13:46

En fait c'est bizarre parce qu'avec le code de la FAQ j'obtiens un warning et la valeur 169 (qui ne correspond pas au é accent), alors qu'avec le miens je n'ai pas de warning et j'obtiens la valeur 233 (qui elle est correcte).

Bon j'avoue que pour l'instant je m'y perd un peu avec les caractères étendus mais c'était juste pour savoir si le code de la FAQ était correcte.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2010 à 13:40:26

Salut,

Merci de ne pas poster dans ce sujet pour nous exposer ton problème. Essaie plutôt de créer un nouveau sujet, à toi, où on ne parlera que de ton souci. Sans ça, on arrivera pas à s'en sortir.

Pour la proposition d'ajout de qsort, depuis tout ce temps personne n'a posté d'avis. Yoch, je t'invite donc à la poster directement sur la FAQ, et je te référencerai dans le premier message.

Pour la question des accents, finalement, que modifier ?

Bonne continuation tout le monde !
GuilOooo
  • Partager sur Facebook
  • Partager sur Twitter
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
15 juin 2010 à 17:27:14

Vous devriez éviter de parler de "ASCII étendu". L'ASCII c'est de 0 à 127, point barre.
Au délà, ce sera du CP OEM-850, du CP-1252 (aka windows 1252), du latin-1 (aka iso-8859-1), du latin-9 (aka iso-8859-15), ou encore de l'UTF-8 sur nos machines françaises. "ASCII étendu" sous-entend les OEM-xxx d'IBM que l'on retrouve sous 150 formes différentes (selon le pays).

Or votre 'é', selon sous quoi a été codé votre fichier vous donnera 130 (à peu tout le reste tant que l'on reste en 8-bits) ou 233 (notepad), notepad étant le seul qui vous permettra, sous windows, (par défaut) de vraiment obtenir un 'é' à l'écran (i.e. la console DOS non configurée) tandis que l'on voit un 'é' dans l'éditeur. (et attention aux signes lors des conversions)
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
16 juin 2010 à 15:33:01

Sauf que UTF-8, n'a rien avoir avec l'ascii, ca correspond que avec le 7-bit ascii, mais pour le reste ca code en plus d'un byte. Le 'é' en UTF8 prend deux bytes par exemple.
Alors que pour les ascii étendu, quelque soit la norme utilisé ca prendra toujours un byte.
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2010 à 16:22:15

Et le pauvre zéro qui débarque ne va pas comprendre pourquoi sa machine sous Linux (nativement en utf-8) aura un comportement encore différent de celui décrit dans la FAQ.
Accessoirement, l'entrée wikipédia sur ce terme accepte l'UTF-8 -> http://en.wikipedia.org/wiki/Extended_ASCII
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
23 juin 2010 à 14:29:41

[4][1] Comment transformer ma chaîne de caractères en nombre (int, float) ?

Bonjour, est-il possible de faire l'inverse ? Je n'ai pas trouvé dans la FAQ.
Par exemple, avoir un int i qui devienne un char i. Je demande cela car j'aurais besoin d'effectuer une contaténantion, avec l'indice d'une boucle for.
int i = 1;
char chaine[500] = "fichier";
// Je voudrais obtenir apres concatenation : chaine == "fichier1"

Merci.
  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2010 à 18:54:35

Bin un int et un char c'est pareil. La seule différence c'est qu'un char fait un byte alors qu'un int en fait plus (en général 4). Pour ce que tu veux faire (transformer un entier en chaîne de caractère) il faut utiliser sprintf. Au passage je pense pas que ca soit l'endroit pour poser des questions et je pense que ton message tout comme le miens va être supprimé.
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2010 à 9:38:34

Beh ça serait bien que dans la FAQ on explique aux debutants comme moi comment faire le changement int <-> char* dans un sens comme dans l'autre donc je pense que mon post a une raison d'etre la.
  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 13:17:02

Ç'ui là aussi par conséquent.
  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 13:18:42

Sans vouloir être offensant, intérêt ?

Tu as refait strlen.
Tu nous aurait dit "Comment récupérer un tableau de caractères sans sa taille" j'aurai été bluffer si tu avais réussi.

Mais une chaine ...
tu as string.h pour les manipuler.
  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 13:27:07

Non, mais c'était juste une proposition ^^
  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 14:21:06

Citation : perimgui

Non, mais c'était juste une proposition ^^


même critique que pour les exos.

Regarde ce qui existe avant de proposer un truc.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
3 juillet 2010 à 14:48:07

Pour les exercices, je ne trouve pas que c'est justifier.

Et quand j'ai vu que pour la FAQ de la SDL, il y en a un qui propose "comment changer le curseur de la souris", je me suis dit que ça allait.

Mais je crois que je vais enlver mon message ...

  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 15:21:24

Salut
Mon post n'est pas constructif au niveau du contenu de la FAQ, mais plutôt sur le moyen d'y accéder. Je me doute que ce que je propose est sûrement long à mettre en application, étant donné que je n'ai aucune idée de qui s'occupe de ça, et ce(s/tte) personne(s) ne vien(t/nent) sûrement pas sur ce forum, mais bon, dans l'espoir que l'un de vous saurait les contacter...

Alors voilà, je n'ai pas du tout le réflexe d'aller dans la FAQ avant de poster un sujet, mais plutôt de faire une recherche.
Donc mon idée, ce serait tout simplement de mieux "référencer" la FAQ dans le moteur de recherche du site, afin que si la FAQ traite du sujet recherché, ce soit un des premiers liens disponibles.

Car par exemple, j'ai tapé "keylogger" dans recherche, car je l'ai vu dans le premier post, et je n'ai pas vu de lien vers la FAQ...
Ca serait donc bien que ce soit la FAQ qui apparaisse au début des résultats du moteur de recherche, plutôt que des liens vers des posts où on peut souvent voir, google est ton ami, lmgtfy, RTFM, STFW, ou même "t'as qu'a faire une recherche sur le sdz", car bon si on fait une recherche, ce n'est pas pour qu'on nous dise de faire une recherche...

Bref, j'espère que vous avez saisi l'idée principale de mon post, à savoir le référencement de la FAQ dans le moteur de recherche interne

Enjoy :)
  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 15:39:25

Et pourquoi ne pas "mettre en valeur" cette FAQ en supprimant tous les posts inutiles (quand elle sera complète bien sur) et en la métant en rouge.

Exemple quand on clique sur "Forum langage C":

Icone | Titre du sujet | Page | Créateur | Rép | dernier message

|----|| FAQ C | 1..11| XxX |XxX | De: XxX
|----|

Tout en rouge : le |---| représente une îcone rouge ^^
  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2010 à 15:41:59

Citation : pal


...
car bon si on fait une recherche, ce n'est pas pour qu'on nous dise de faire une recherche...

Bref, j'espère que vous avez saisi l'idée principale de mon post, à savoir le référencement de la FAQ dans le moteur de recherche interne


Tout à fait d'accord avec l'idée, mais...

Ca doit pas être simple à mettre en place! :-°
Après ça implique de rajouter un champs de recherche au moteur, etc...
Mais pourquoi pas, encore une fois, oui ça donnerait du poids à la FAQ et éviterais des répétitions de post.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
13 juillet 2010 à 12:04:33

Rien avoir avec ça, mais juste une légère remarque sur :

(de yoch)

Je trouve le titre inaproprié (oui ce n'est que ça :-° ), car le petit zér0 qui cherche à bien organiser ses tableaux passera par la FAQ sans voir que la réponse à ses interrogations y est (qsort(), ce n'est pas très parlant quand on ne connais pas). Ça concerne aussi d'autres sujets, mais celui-ci étant le dernier en date... ;)
Quelque chose comme "organiser ses tableaux avec qsort()" serait plus consulté. Voilà c'est tout.

Le lien vers le sujet dans la faq ici.
  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2010 à 16:53:58

+1, je vois mal les zéro être capables de jouer à un jeopardy spécial C.
Mais "comment trier ses tableaux?", c'est encore mieux.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
14 juillet 2010 à 0:23:07

Citation : Arthurus

Citation : GuilOooo

En fait l'idée, c'est que les habitués qui répondent aux questions disent simplement « va voir dans la FAQ, la réponse y est » lorsque c'est le cas.


Le problème c'est qu'il y a toujours des petits malins qui veulent faire les beaux, et ignorent totalement ton post, et répondent quand même !! (j'ai vécu ça, j'ai longtemps combattu les posts qui n'utilisaient pas les balises, mais à chaque fois que je signale qu'il faut utiliser les balises, t'as un ptit con juste après qui répond au PO, comme si genre toi t'avais pas su répondre -_-')
A mon avis il faut être un peu plus radical, locker les posts qui posent des questions qui sont dans la FAQ, après s'il s'avère que le PO ne trouve pas ce qu'il veut dans la FAQ, il ouvre un nouveau topic, et précise bien qu'il est allé voir la FAQ, et que ça ne l'a pas aidé.



Je suis tout à fait d'accord avec ça. Le forum du SDZ propose une aide d'une qualité vraiment impressionnante, cependant, je trouve qu'un majorité de personne en attendent donc du tout cuit, il perdent donc tout réflex de recherche par eux même. Et ils croient donc tout naturel de recevoir cet aide sur ce forum, et donc prenne ça pour un droit et non pas pour le luxe qu'il est. Donc oui, je suis pour un lock plus ou moins automatique de tous les topics ne montrant aucune recherche apparente.


Et quand tu parles de "ptit con", il faut voir ça sous un autre angle. C'est en fait des gens qui ont débuté grâce à ce site et grâce à ce forum, ils ont vénéré les gens qui les ont aidés, et leur rêve est de pouvoir rendre à ce site tout le savoir qui leur a donné. Et c'est pour eux un honneur de pouvoir aider quelqu'un d'autre, ce n'est jamais une provocation quelconque.
  • Partager sur Facebook
  • Partager sur Twitter
14 juillet 2010 à 11:24:04

Citation : L'Ombre Blanche


Et quand tu parles de "ptit con", il faut voir ça sous un autre angle. C'est en fait des gens qui ont débuté grâce à ce site et grâce à ce forum, ils ont vénéré les gens qui les ont aidés, et leur rêve est de pouvoir rendre à ce site tout le savoir qui leur a donné. Et c'est pour eux un honneur de pouvoir aider quelqu'un d'autre, ce n'est jamais une provocation quelconque.



Je me reconnais dans "ptit con" car je donne des fois du tout cuit, mais c'est parce que j'ai vu tellement de posts avec le PO qui repose a chaque fois la même question car les réponses le forcent à réfléchir, que je préfère donner la réponse pour que le post soit résolu, coule et arrête de polluer la première page du forum.

Mais c'est sûr qu'un auto-lock pour manque de recherche en ferait réfléchir plus d'un, et si on voit que le PO a envie de découvrir la réponse par lui même avec des pistes qu'on lui donne, ca donne envie de l'aider et de ne pas lui livrer du tout cuit
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 septembre 2010 à 22:04:00

Bonsoir,

je remarque que la question "Je suis sous Visual, mon programme s'exécute normalement mais il disparait après trois secondes. Que faire ?" est fréquemment posée sur le forum C. La réponse étant "Il faut simplement compiler avec CTRL+F5" ; Je pense que l'on pourrait intégrer cette question à cette FAQ, qu'en dites vous ?
  • Partager sur Facebook
  • Partager sur Twitter
3 septembre 2010 à 0:28:14

s/compiler/exécuter
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
13 septembre 2010 à 18:55:24

Bonjour, j'aimerais savoir si je peux répondre à la question [2][3] qui parle de comment effacer la console.

Seulement, si on fait par exemple system("clear"); sous Linux (je n'ai pas sous les yeux le nom de celle de Windows), la console sera effacé et tout ira bien non ? Bon je sais que ce n'est pas "portable" mais ça peut quand même en aider certain ?

Sinon pourriez vous m'expliquer les inconvéniant que cela procure ?

Merci d'avance pour vos agréables réponses.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
13 septembre 2010 à 21:46:07

Si quelqu'un veut retrouver ce qu'il avait dans sa console avant qu'il ne lance le programme, il ne pourra pas et sera, peut-être, embêté ...
  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2010 à 23:51:19

Pour connaître les conséquences d'un paramètres de la fonction system non reconnu par l'OS il faut se reporter à la documentation de ce dernier d'après la norme (C99) :

Citation : 7.20.4.6 The system function

2- If string is a null pointer, the system function determines whether the host environment has a command processor. If string is not a null pointer, the system function passes the string pointed to by string to that command processor to be executed in a manner which the implementation shall document; this might then cause the program calling system to behave in a non-conforming manner or to terminate.



La norme nous met en garde contre un paramètre non reconnu. Donc voilà la principale raison.
  • Partager sur Facebook
  • Partager sur Twitter
21 décembre 2010 à 20:48:44

"... makes pointer from integer without a cast" croise toujours mon chemin, sans que je sache toujours comment m'en débarrasser, alors que je comprends la phrase.

Peut-être aurait-elle sa place dans la FAQ ?
  • Partager sur Facebook
  • Partager sur Twitter
25 juin 2011 à 12:41:22

Je voudrait proposer:
[5][9]Code::block - Transformer sont main.cpp en main.c

Tout d'abord copier le contenue de votre main.cpp, ensuite, dans la liste de vos fichier à gauche faite un clic droit sur le fichier main.cpp, faite "Remove file from project", ensuite pour recréer un main, file->new->Empty file.

Une fenêtre s'ouvre clic sur oui, si ce n'est pas dans le dossier contenant les .c/.h de votre projet, aller dedans taper "main.c" en nom de fichier, faite enregistrer et pour finir coller votre code dedans.

<gras>[5][9]Code::block - Transformer sont main.cpp en main.c</gras>

Tout d'abord copier le contenue de votre main.cpp, ensuite, dans la liste de vos fichier à gauche faite un clic droit sur le fichier main.cpp, faite "Remove file from project", ensuite pour recréer un main, file->new->Empty file.

Une fenêtre s'ouvre clic sur oui, si ce n'est pas dans le dossier contenant les .c/.h de votre projet, aller dedans taper "main.c" en nom de fichier, faite enregistrer et pour finir coller votre code dedans.
  • Partager sur Facebook
  • Partager sur Twitter