Programme en c

Fermé
jihad86 Messages postés 19 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 25 juin 2006 - 14 avril 2006 à 22:49
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 15 avril 2006 à 11:01
--
lovely flower 1986
salut tout le monde ,
je voudrais avoir la solution de se programme ,
un programme qui simule le fonctionement de la fonction "atoi".

4 réponses

mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
15 avril 2006 à 02:10
C'est dans le même genre que ce qu'on a fait ici :
https://forums.commentcamarche.net/forum/affich-2193642-langage-c

Sauf que là tu t'intéresse à la lecture d'un mot seulement. Parcours chaque caractère de ce mot et tant que c'est à chiffre, tu multiplie par 10 le résultat précedemment calculé et tu ajoute le chiffre que tu viens de lire.
unsigned int read_unsigned_int(char *mot){
  unsigned short int n=0;
  unsigned int res=0;
  while( sscanf(mot,"%d",&n) == 1 ){
    res*=10;
    res+=n;
  }
  return res;
}

Encore une fois c'est l'idée que je te donne je n'ai pas testé si ça marchait... Je te laisse peaufiner tout ça.

Bonne chance
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 avril 2006 à 02:17
Salut,

malgré l'heure t'est toujours performant(e).

lami20j
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
15 avril 2006 à 10:13
En fait je viens de me rendre compte que c'était faux parce que le %d va lire d'un coup le nombre. Il faut faire un truc à base de getc (à la place du sscanf) en fait, et après repartir du code ascii pour le convertir le char en entier.

Sinon le reste est pareil.

Merci du compliment lami20j, je suis flattée ;)

Bonne chance
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
15 avril 2006 à 10:46
Je dis n'importe quoi ce matin, vu qu'on fait du atoi on ne fait pas de getc ou de scanf... Oulala heureusement c'est le week-end ;-)

http://www.manpagez.com/missing.php
#include <string.h>
#define ERR 0

unsigned short int ctoi(char c){
  if(c>=48 && c <=57){
    return c-48; // conversion ascii --> decimal
  }
  printf("ctoi : caractère %c invalide... retourne %d\n",c,ERR);
  return ERR;
}

unsigned int read_unsigned_int(char *mot){
  unsigned int i,res=0,len=strlen(mot);
  unsigned short int n;
  for(i=0;i<len;++i){
    res*=10;
    n=ctoi(mot[i]);
    if(n==ERR){
      printf("atoi : chaine %s invalide... retourne %d\n",mot,ERR);
      return ERR;
    }
    res+=n;
  }
  return res;
}

En espérant m'être pas trop craquée cette fois-ci ;-)

Bonne chance
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
15 avril 2006 à 11:01
en fait pour ERR faut prendre une valeur qui n'est pas dans {0,...9}. En fait on n'a qu'à prendre ERR == -1 et retourner des entiers signés pour les deux fonctions comme ça c'est reglé ;)
0