#51 Le 17/12/2010, à 13:39
- Rolinh
Re : /* Topic des codeurs couche-tard [3] */
Bah, si tu veux on peut se créer un fil où débattre de ce genre de choses. Histoire que quand ça commence, on parte là-bas et on ne gène pas les gens ici
Parce que moi je veux bien continuer le débat, je le trouve loin d'être inutile
Hors ligne
#52 Le 17/12/2010, à 13:41
- grim7reaper
Re : /* Topic des codeurs couche-tard [3] */
Bah justement, ce fil a été créé entre autres pour ça (les débats entre codeur) car on dérangeait un peu (quand on parlais code) sur le TdCT Pylade et moi
En ce qui concerne ce débat, je pense qu'il est effectivement clos (du moins à mon avis).
Que tu ne l'utilises jamais, je n'ai rien à redire, et lorsque tu dis qu'elle est délicate à bien utiliser c'est la stricte vérité.
J'avais surtout tiqué sur le « Elle n'est pas sûre, il ne faut surtout pas l'utiliser ». D'où le débat.
Pour le reste je n'ai rien à redire .
Dernière modification par grim7reaper (Le 17/12/2010, à 13:47)
Hors ligne
#53 Le 17/12/2010, à 13:47
- Rolinh
Re : /* Topic des codeurs couche-tard [3] */
Bon alors c'est repartit
Par contre, ça ce n'est vraiment pas correct:
Et tu n'as pas percuté que mon bout de code avec les formats c'était du fscanf
Tu as modifié ton post après coup
A la base, tu avais mis ça:
scanf("%8d%8d%100[^\n]", &news->debut, &news->fin, news->msg);
(log d'une conversation jabber que j'avais avec un ami là-dessus justement)
Si tu es de mauvaise foi, je ne suis plus motivé à débattre
EDIT: correction du lien du post
Dernière modification par Rolinh (Le 17/12/2010, à 13:51)
Hors ligne
#54 Le 17/12/2010, à 13:48
- grim7reaper
Re : /* Topic des codeurs couche-tard [3] */
A la base, tu avais mis ça:
scanf("%8d%8d%100[^\n]", &news->debut, &news->fin, news->msg);
Oui, mais j'ai édité par la suite et je l'ai clairement indiqué à la fin de mon post.
Je n'ai pas fait ma modif' en cachette .
Édit : on parle de fscanf (ArkSeth bosse sur un fichier) donc j'ai édité mon code en conséquence.
Dernière modif, hier soir.
Dernière modification par grim7reaper (Le 17/12/2010, à 13:51)
Hors ligne
#55 Le 17/12/2010, à 13:53
- Rolinh
Re : /* Topic des codeurs couche-tard [3] */
Oui, mais j'ai édité par la suite et je l'ai clairement indiqué à la fin de mon post.
Je n'y avais pas fait attention. Je ne relis pas les posts après coup en général
EDIT: je répond donc à ton autre post, laisse-moi juste le temps
Dernière modification par Rolinh (Le 17/12/2010, à 13:55)
Hors ligne
#56 Le 17/12/2010, à 13:54
- grim7reaper
Re : /* Topic des codeurs couche-tard [3] */
C'est pas grave, ça arrive à tout le monde (moi le premier)
Hors ligne
#57 Le 17/12/2010, à 14:11
- Elzen
Re : /* Topic des codeurs couche-tard [3] */
C'est mignon ^^
Mais ma remarque était d'ordre général, et pas spécifique à votre conversation. Genre par exemple, ça s'adresse aussi à ceux qui disent que PHP saymal juste parce qu'ils n'aiment pas les $, ou ce genre de choses
Eùh, sinon, les gens, please help…
Toujours ma jolie calculatrice (au fait, version « var nom type » est acceptée. Il paraît que ça ressemble au Pascal, que mon binôme a dû bouffer pendant un certain temps à ses débuts), j'ai un bug bizarre… quand je demande un double, genre par exemple 2.2, ça me renvoie 2,00000
Le plus étrange, c'est que quand je lance le même programme en ligne de commande, le même 2.2 m'affiche bien 2.20000
Et je fais pourtant la conversion avec strtod comme suggéré.
Quelqu'un aurait
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#58 Le 17/12/2010, à 14:15
- Rolinh
Re : /* Topic des codeurs couche-tard [3] */
Bah le débat est parti du fait que j'ai conseillé fscanf à ArkSeth, si vous changez de sujet en cours de route faut le dire aussi…
Bah c'est juste que, même si au départ c'était partit de fscanf, tu n'as rien fait d'autre que de mentionner scanf par la suite... Donc, peut importe le sujet d'origine: quand on me dit scanf, j'entend scanf et pas fscanf.
Question 12.18a : le code fonctionne bien si on connait scanf et qu'on vide bien le buffer quand il y a problème.
Question 12.17 : suffit de lire le man.
Question 12.19 : même connerie que 12.18
Bon, alors je vais te trouver autre chose
Un exemple que je tire d'ici (et ne me dis pas que c'est une mauvaise source, hein)
Code non-correct:
long sl;
if (scanf("%ld", &sl) != 1) {
/* handle error */
}
Code correct
long sl;
errno = 0;
if (scanf("%ld", &sl) != 1) {
/* handle error */
}
else if (ERANGE == errno) {
if (puts("number out of range\n") == EOF) {
/* Handle error */
}
}
et équivalent avec fgets:
char buff[25];
char *end_ptr;
long sl;
if (fgets(buff, sizeof(buff), stdin) == NULL) {
if (puts("EOF or read error\n") == EOF) {
/* Handle error */
}
} else {
errno = 0;
sl = strtol(buff, &end_ptr, 10);
if (ERANGE == errno) {
if (puts("number out of range\n") == EOF) {
/* Handle error */
}
}
else if (end_ptr == buff) {
if (puts("not valid numeric input\n") == EOF) {
/* Handle error */
}
}
else if ('\n' != *end_ptr && '\0' != *end_ptr) {
if (puts("extra characters on input line\n") == EOF) {
/* Handle error */
}
}
}
Alors je suppose que tu vas me rétorquer que c'est bien plus long avec fgets. Cependant, voilà: pour moi la première des solutions correctes, bien que correcte n'est pas acceptable puisque c'est spécifique à Linux de gérer ERANGE.
On Linux platforms, scanf() sets errno to ERANGE if the result of integer conversion cannot be represented within the size specified by the format string [Linux 2008].
.
Donc, autant faire du code propre et portable directement.
Ensuite, je voulais également revenir sur quelque chose que je n'avais pas fait hier, faute de référence mais c'est pour répondre à Pylade:
Pour atoi, c'est juste un peu plus « à la Rache » que d'utiliser strtol, mais je ne vois vraiment pas ce qui pourrait justifier une dépréciation…
Le problème de atoi, c'est que le comportement de cette fonction lors d'erreurs est complétement imprévisible. Afin d'appuyer mon propos, je te laisse lire ça.
Hors ligne
#59 Le 17/12/2010, à 14:18
- helly
Re : /* Topic des codeurs couche-tard [3] */
Allé hop, fini ! (les contrôles)
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#60 Le 17/12/2010, à 14:21
- Rolinh
Re : /* Topic des codeurs couche-tard [3] */
Quelqu'un aurait
Il ne manque pas quelque chose?
Tu pourrais paster le bout de code qui dérange stp?
Hors ligne
#61 Le 17/12/2010, à 14:42
- Elzen
Re : /* Topic des codeurs couche-tard [3] */
…des suggestions ? (j'avais deux personnes qui me parlaient en même temps de sujets différents (et différents de celui sur lequel je postais), et je devais dégager rapidement parce qu'un TP allait commencer dans la salle où j'étais, donc bon ^^")
Comme ça vient de flex et de yacc, je peux difficilement cibler le bout de code précis qui est responsable, mais quelques extraits :
Flex
real (({digit}+(\.{digit}+)?)|(\.{digit}+))(e[+\-]?{digit}+)?
%%
{real} {
yylval.type = VARTYPE_REAL;
yylval.realPart = strtod(yytext, NULL);
yylval.imgPart = 0;
return REAL;
}
Yacc
%token REAL
%%
F : REAL {
$$ = $1;
fprintf(yyout, "%f\n", $1.realPart);
}
Main
if (argc > 1 && strcmp(argv[1], "--cli") == 0)
yyparse();
else
start_gui(argc, argv);
GUI
yyout = tmpfile();
yyin = tmpfile();
text = (char*) g_locale_from_utf8(text, -1, NULL, NULL, NULL);
fprintf(yyin, "%s\n", text);
fseek(yyin, 0, SEEK_SET);
yyparse();
fseek(yyout, 0, SEEK_END);
result = malloc(ftell(yyout)*sizeof(char));
fseek(yyout, 0, SEEK_SET);
fscanf(yyout, "%s", result);
result = (char*) g_locale_to_utf8(result, -1, NULL, NULL, NULL);
Je soupçonne peut-être la conversion utf8, mais j'vois pas pourquoi
Autre problème : après déclenchement du bout de code ci-dessus, result n'a l'air de ne contenir que la première ligne affichée sur yyout :s
(Pour ce dernier problème, je soupçonne un fscanf totalement inapproprié )
Dernière modification par ArkSeth (Le 17/12/2010, à 15:03)
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#62 Le 17/12/2010, à 14:58
- tshirtman
Re : /* Topic des codeurs couche-tard [3] */
Et tes terminaux ils ont tous le focus en même temps ?
Avec un IDE, l'interface chaise/clavier local (moi) ne perd plus son temps à changer de contexte, tout simplement..
non, pourquoi auraient ils tous le focus en même temps? par contre je peux choisir d'afficher n'importe quelle combinaison de ceux ci, positionnés comme je veux…
Ton curseur dans l'IDE est toujours dans une seule sous fenêtre… moi il est toujours dans un seul terminal, et je choisit lequel en une-deux frappes clavier…
Hors ligne
#63 Le 17/12/2010, à 15:13
- Rolinh
Re : /* Topic des codeurs couche-tard [3] */
@ArkSeth: heum... je n'ai pas les capacités à t'aider
Hors ligne
#64 Le 17/12/2010, à 16:45
- Pylades
Re : /* Topic des codeurs couche-tard [3] */
[…]
Des fonctions dangereuses car mal utilisées, j'en connais un paquet mais dans ce cas ce n'est plus la faute de la fonction mais celle du développeur.
[…]
Ouais, unlink est dangereuse : tu pourrais par inadvertance taper unlink("/bin/sh"), et pour peu que ton programme soit lancé par root, tu va avoir de gros problèmes.
Il vaut donc mieux éviter d'utiliser unlink.
Plooop nesthib ! \o/
Le doc a parlé \é-"a
/
edit : oO clavier de merde qui permet même pas de taper de l'utf.
Unicode, helly, Unicode ; pas UTF…
Pylade a écrit :Ouais, pour coder il faut un éditeur de texte, un compilateur ou un interpréteur, et éventuellement un make ou un débuggeur.
Et si je veux la complétion de code ou autre chose qu'apporte un IDE je fais comment ?
(oui VIM fait l'omnicomplétion, mais si j'ai pas envie d'utiliser VIM ?)
J'ai parlé d'un éditeur de texte, pas d'une interface à echo. Un éditeur de texte digne de ce nom gère la complétion (et Vim est le meilleur de tous ).
Pylade a écrit :Sinon, à quoi ça sert ces trucs lourds
pas chez moi.
Nous ne disposons pas tous d'une bête de course…
Pylade a écrit :et inconfigurables ?
J'ai juste envie de dire lol.
J'ai utilisé Code::Blocks qui apparemment fait partie des pas trop mauvais, et pour configurer l'IDE ou le projet, c'est le parcours du combattant, quand c'est possible…
Pylade a écrit :En plus on a du mal à voir réellement ce qu'on fait avec
WTF, ah bon ? Faut pas confondre Netbeans et Windev non plus...
Ça fait plein de trucs sans te le dire… au un utilisant les bons outils, on sait exactement ce qui est fait et quand c'est fait.
Pylade a écrit :; et ensuite c'est la galère pour distribuer son code…
c'est à dire ?
Ben, quand tu distribues ton code, comment les gens font pour le compiler ? Ils installent ton IDE et utilisent le fichier de projet spécialement pour ? Tu ne va pas te faire que des amis…
essaie de gérer un gros projet avec plein de fenêtres ouvertes (un terminal pour les man, un autre pour compiler, et peut-être encore un autre pour git) +1 un éditeur de texte (j'préfère un éditeur de code, et avec des onglets, c'est déjà un peu mieux), t'auras comme moi vite marre de faire Alt-tab ou de changer de bureau...
Mon éditeur de texte gère les onglets, est capable de discuter avec mon shell, m'affiche les pages de manuel quand je lui demande, et tout ça sans que mes mains ne quittent le clavier. Donc je n'ai pas besoin de changer de bureau en permanence ; en fait j'ai juste un émulateur de terminal ouvert.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#65 Le 17/12/2010, à 17:06
- tshirtman
Re : /* Topic des codeurs couche-tard [3] */
C'est mignon ^^
Mais ma remarque était d'ordre général, et pas spécifique à votre conversation. Genre par exemple, ça s'adresse aussi à ceux qui disent que PHP saymal juste parce qu'ils n'aiment pas les $, ou ce genre de choses
y'a pleins de raisons valables de pas aimer php, pas besoin d'aller en inventer des discutables
Hors ligne
#66 Le 17/12/2010, à 17:10
- Pylades
Re : /* Topic des codeurs couche-tard [3] */
:]
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#67 Le 17/12/2010, à 17:21
- Pylades
Re : /* Topic des codeurs couche-tard [3] */
Un gentil modo pour faire un dernier post propre sur le TdCCT[2] histoire que je puisse lancer le bot avant de partir en soirée ?
Il ne doit y avoir que le lien.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#68 Le 17/12/2010, à 17:23
- nany
Re : /* Topic des codeurs couche-tard [3] */
Bonjour chez vous.
@Pylade : s'il ne doit y avoir QUE le lien, c'est que ton compteur est mal codé.
En ligne
#69 Le 17/12/2010, à 17:31
- helly
Re : /* Topic des codeurs couche-tard [3] */
Un gentil modo
On m'a appelé ?
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#70 Le 17/12/2010, à 17:37
- Pylades
Re : /* Topic des codeurs couche-tard [3] */
Bonjour chez vous.
@Pylade : s'il ne doit y avoir QUE le lien, c'est que ton compteur est mal codé.
(Quand j'aurai le temps…)
@helly : merci, mais le lien doit être absolu…
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#71 Le 17/12/2010, à 17:41
- helly
Re : /* Topic des codeurs couche-tard [3] */
Nan mais il pue ton compteur !
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#72 Le 17/12/2010, à 17:59
- nany
Re : /* Topic des codeurs couche-tard [3] */
C'est clair. Si ça se trouve, il va aussi te demander d'ajouter « &p=1 ».
En ligne
#73 Le 17/12/2010, à 18:21
- tshirtman
Re : /* Topic des codeurs couche-tard [3] */
17:07 -!- tshirtman [~gaby@unaffiliated/tshirtman] has joined #gmail
17:07 -!- ServerMode/#gmail [+ns] by niven.freenode.net
17:07 [Users #gmail]
17:07 [@tshirtman]
17:07 -!- Irssi: #gmail: Total of 1 nicks [1 ops, 0 halfops, 0 voices, 0 normal]
17:07 -!- ServerMode/#gmail [-o tshirtman] by services.
17:07 !niven.freenode.net *** Notice -- TS for #gmail changed from 1292602842 to 1264780149
17:07 -!- ServerMode/#gmail [+it-s] by services.
17:07 -!- ChanServ [ChanServ@services.] has joined #gmail
17:07 -!- ServerMode/#gmail [+o ChanServ] by services.
17:07 -!- ChanServ changed the topic of #gmail to: Reserved for Google
17:07 -!- tshirtman was kicked from #gmail by ChanServ [Invite only channel]
:'( je voulais demander comment faire un truc
Hors ligne
#74 Le 17/12/2010, à 18:36
- grim7reaper
Re : /* Topic des codeurs couche-tard [3] */
Bah c'est juste que, même si au départ c'était partit de fscanf, tu n'as rien fait d'autre que de mentionner scanf par la suite... Donc, peut importe le sujet d'origine: quand on me dit scanf, j'entend scanf et pas fscanf.
Vous avez direct embrayez sur scanf donc je suis resté sur votre appellation (pensant que c'était un diminutif, c'est vrai qu'à bien y réfléchir c'était pas trop logique, mais bon dans le feu de l'action…), mais bon au final on s'en fiche un peu de ça, ce n'est pas le cœur du débat (du moins je pense).
(et ne me dis pas que c'est une mauvaise source, hein)
Je n'ai pas dis que c'était une mauvaise source. Au contraire, elle est plutôt bonne (et à bonne réputation) et j'ai donc été surpris de voir ce genre de chose (style : « tiens ça bug, alors caca faut pas toucher », au lieu de « tiens ça bug, voilà la bonne façon de faire »).
Sinon pour ton autre exemple, oui il est correct mais je ne vois pas trop ce que tu essayes de prouver…
Ai-je dis que scanf était bon dans tout les cas ? Qu'elle était la fonction de lecture absolue à toujours utiliser ?
Je ne pense pas (ou alors ça mérite une quote).
Au contraire, lorsqu'hier tu m'as parlé d'ERANGE je ne t'ai pas contredis.
J'ai même reconnu que c'était une de ses limitations (en justifiant son utilisation dans mon exemple par l'impossibilité de faire un overflow avec 8 chiffres sur une archi standard).
Oui je sais (enfin, le standard ne le garantis pas, ça n'est pas la même chose qu'une absence totale bien que ça soit presque pareil), mais il n'y a aucune chance de dépassement sur 8 chiffres.
Bien sûr que dans le cas général, lors de la lecture d'un nombre, j'utilise fgets et les conversions associées (je m'était même codé une lib d'I/O basé là-dessus à une époque). Donc dans ton exemple j'aurais également opté pour la version fgets par soucis de sécurité ET de portabilité.
(Pour ce dernier problème, je soupçonne un fscanf totalement inapproprié
)
Oui, fscanf (comme fgets) s'arrête lorsqu'il rencontre une fin de ligne.
Il faut utiliser une boucle pour lire ligne à ligne.
D'ailleurs, je te conseille fgets ici (pas de formatage particulier, tu veux juste lire tout le fichier).
Pour l'histoire du double, je regarde mais je ne te promets rien.
C'est quoi le code qui affiche les variables en GUI (vu que l'affichage en console fonctionne, je suppose que la lecture est correcte et que c'est le rendu graphique qui merdoie) ?
Ben, quand tu distribues ton code, comment les gens font pour le compiler ? Ils installent ton IDE et utilisent le fichier de projet spécialement pour ? Tu ne va pas te faire que des amis…
Il me semble que certains IDE génèrent des Makefile (ou du CMake) standards (oui, pas Code::Blocks, c'est un reproche qui lui est souvent fait d'ailleurs).
@tshirtman : O_o, hé bhé…
Dernière modification par grim7reaper (Le 17/12/2010, à 19:02)
Hors ligne
#75 Le 17/12/2010, à 18:59
- Pylades
Re : /* Topic des codeurs couche-tard [3] */
C'est clair. Si ça se trouve, il va aussi te demander d'ajouter « &p=1 ».
Ça doit être ça (ou pas)…
Bon, rien à foutre, je vais au bal, à plus.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne