Atoi - C - Programmation
Marsh Posté le 19-01-2011 à 03:28:05
Question pas précise quand même. Tu voudrais qu'atoi s'arrête avant le \0 ?
D'une de mémoire, atoi est dépréciée, il faut utiliser strtol (ou strtod je sais plus), qui s'arrête au dernier caractère numérique valide, ce qui résoudra peut être ton problème
De deux si tu as besoin de convertir un seul chiffre, tu peux simplement retrancher 48 à la valeur ascii du caractère, mais vu la gueule de ton code j'ai l'impression que c'est pas ce que tu recherches.
Maintenant si tu as des besoins plus spécifiques, il te faudra coder ta propre fonction (a moins, encore une fois, qu'une fonction dont j'ignore l'existence te permette de déterminer le caractère d'arrêt)
Mais j'imagine que strtol suffit à résoudre ton problème (même s'il me semblait qu'atoi s'arrêtait aussi au premier caractère non valide)
Marsh Posté le 19-01-2011 à 10:54:57
En fait je voudrais qu'atoi (ou autre) convertisse une saisie en chiffre mais caractères par caractères.
Or actuellement même en lui envoyant atoi(chaine[i]) il me convertit toute la chaine jusqu'à un caractère qui n'est pas un chiffre.
Marsh Posté le 19-01-2011 à 11:02:24
WiiDS a écrit : D'une de mémoire, atoi est dépréciée, il faut utiliser strtol (ou strtod je sais plus), qui s'arrête au dernier caractère numérique valide, ce qui résoudra peut être ton problème[/auotemsg] |
Tu peux me dire pourquoi 48 plutot que '0', a part introduire une dependance inutile sur l'implementation et obscurcir le code?
Plame a écrit : En fait je voudrais qu'atoi (ou autre) convertisse une saisie en chiffre mais caractères par caractères. |
Petit rappel de vocabulaire: chiffre: c'est le symbole, nombre c'est la valeur. Chiffre correspond a lettre et nombre correspond a mot.
Si tu as un chiffre decimal dans une variable de type char c, tu peux en avoir la valeur en faisant c-'0'.
Marsh Posté le 19-01-2011 à 12:30:33
Oui merci c'était exactement sa qu'il me fallait
Par contre j'ai une petite "erreur" dans une autre de mes fonctions.
Enfin pas une erreur à proprement parler mais juste un bug avec scanf.
Quand j'appelle cette fonction la première phrase apparait 2 fois. Je pense que sa vient du buffer, mais j'ai oublié quel était le code à écrire pour vider le buffer.
Code :
|
Marsh Posté le 19-01-2011 à 12:45:44
Un Programmeur a écrit : |
Implémentation je veux bien, mais obscurcir le code, '0' ou 48 ça reste aussi moche
Marsh Posté le 19-01-2011 à 13:58:48
Plame a écrit : Quand j'appelle cette fonction la première phrase apparait 2 fois. Je pense que sa vient du buffer, mais j'ai oublié quel était le code à écrire pour vider le buffer. |
Lis jusqu'a un '\n'.
WiiDS a écrit : Implémentation je veux bien, mais obscurcir le code, '0' ou 48 ça reste aussi moche |
Dans le premier cas, le sens est clair, dans le deuxieme, il faut le savoir.
Marsh Posté le 19-01-2011 à 14:20:34
Un Programmeur a écrit : |
un str[i] - '0' je trouve pas ça super clair non plus, faut un minimum connaître l'astuce et quand on la connaît je doute que - 48 fassent plus étrange.
Marsh Posté le 19-01-2011 à 02:16:18
Bonjour,
J'ai un petit problème avec une partie de mon programme vu que je me suis un peu planté sur le fonctionnement de atoi().
J'ai cru que je pourrais analyser caracteres par caracteres la saisie envoyer à atoi mais visiblement ce dernier prend toute la chaine jusqu'à arriver à un \0 . Résultat rien ne marche comme je le voudrais et je me retrouve bloqué. Si quelqu'un voit une solution je suis tout ouïe.
Merci d'avance.