Nombre en ordre inverse

Nombre en ordre inverse - C - Programmation

Marsh Posté le 25-08-2006 à 09:59:52    

Bonjour,
 
le programme suivant à pour but de demander un nombre et de l'afficher en ordre inverse.
Le problème que j'ai, c'est que ce n'est pas le cas à l'affichage.
Voici mon code :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int g(unsigned int n, char *res){
  4.   if (n>9) return 1;
  5.   *res = '0' + n;
  6.   return 0;
  7. }
  8. int f(unsigned int n, char *s, size_t *l){
  9.   char c; size_t cl=*l;
  10.   if(n == 0)
  11.     return 0;
  12.   g(n%10U, s);
  13.   c = *s;
  14.   ++*l;
  15.   f(n/10U, s+1, l);
  16.   if(cl<*l/2){
  17.     *s=s[*l-cl-1-cl];
  18.     s[*l-cl-1-cl]=c;
  19.   }
  20.   return 0;
  21. }
  22. int main(void){
  23.   unsigned int n;
  24.   char buf[BUFSIZ];/*Suppose tres grand*/
  25.   size_t l=0;
  26.   printf("Entrez un nombre: " );
  27.   if(scanf("%u",&n)==1){
  28.     if(n!=0)
  29.       f(n, buf, &l);
  30.     else{
  31.       buf[0]='\0';
  32.       ++l;
  33.     }
  34.     buf[l]='\0';
  35.     fprintf(stdout, "%s %u\n", buf, l);
  36.     return EXIT_SUCCESS;
  37.   }
  38.   else return EXIT_FAILURE;
  39. }


Ce que j'obtiens :

Code :
  1. $ ./test
  2. Entrez un nombre: 45
  3. 45 2


 
Je voudrais aussi savoir comment modifier le main pour être sûr que l'entier sera positif
 
Merci

Reply

Marsh Posté le 25-08-2006 à 09:59:52   

Reply

Marsh Posté le 25-08-2006 à 11:29:18    

Tu peux écrire ton nombre dans une chaine et inverser la chaîne par exemple.

Reply

Marsh Posté le 25-08-2006 à 13:57:00    

Trap D a écrit :

Tu peux écrire ton nombre dans une chaine et inverser la chaîne par exemple.


J aurais fait la meme chose ...
 
et j aurais de plus eviter ce genre de salete

Code :
  1. char buf[BUFSIZ];/*Suppose tres grand*/


vraiment pas propre du tout


Message édité par doton le 25-08-2006 à 14:06:35
Reply

Marsh Posté le 27-08-2006 à 23:15:35    

+1, avec une chaine ça se fait sans problème, un fonction récursive pour afficher la chaîne à l'envers et c'est plié. En plus, ça évite de se limiter aux nombres.

Reply

Marsh Posté le 28-08-2006 à 12:01:57    

En récursif, 8 lignes dont 4 pour les accolades !

Reply

Marsh Posté le 28-08-2006 à 14:12:16    

Trap D a écrit :

En récursif, 8 lignes dont 4 pour les accolades !


 
Effectivement  :)  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed