Bonsoir,
Je suis étudiant en informatique et en ce moment nous apprenons le C. Nous sommes sur un projet ce nommant la "bistromathique" pour les adeptes.
Le but de ce projet c'est de crée une calculatrice gérant des nombres infinies ( jusqu'a la mémoire on va dire...).

Donc nous faisons étape par étape et pour le moment je suis sur : gérer les additions à l'infini.
Je précise avant toute chose que cette partie la devait déjà être rendu donc en aucun cas j'utilise cette discussion pour avoir une bonne note mais plutôt pour pouvoir savoir et ensuite avancer.

J'ai compris qu'il faut fonctionner comme étant petit, calculer caractère par caractère puis gérer une retenue. Cependant voila, le nombre que j'affiche à la fin ne m'affiche pas le 1 ! Je m'explique par exemple :

107 + 5 = 102 alors que ca devrait etre 112
53 + 28 = 71 au lieu de 81

(il additionne pas le caractère d'avant) sachant que je sais que dans une addition, la retenue ne pas pas dépasser 1..!

Voila en esperant trouver quelqu'un qui puisse m'eclairer ! (le soucis est probablement dans addition_2 dans le 2 ou 3 eme if, mais après 100000 tentatives, je ne COMPREND pas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
#include <stdlib.h>
#include "my.h"
 
int     check_error(char *str1, char *str2)
{
  int   i;
 
  i = 0;
  if (str1[0] == '-' || str1[0] == '+')
    i = 1;
  while (str1[i] != '\0')
    {
      if (my_isnum(str1[i]) == 1)
        i = i + 1;
      else
        return (1);
    }
  i = 0;
  if (str2[0] == '-' || str2[0] == '+')
    i = 1;
  while (str2[i] != '\0')
    {
      if (my_isnum(str2[i]) == 1)
        i = i + 1;
      else
        return (1);
    }
  return (0);
}
 
int     addition_2(int a, int b, char *result, char *str2, char *str1, int ret)
{
  ret = 0;
  result = malloc(a + 1);
  if (result == NULL)
    return (1);
  result[a] = '\0';
 
  while (a != 0)
    {
      if (b <= 0)
        str2[b - 1] = '0';
      if (result[a - 1] = ((str2[b - 1] + str1[a - 1]) - 48 <= '9'))
        {
          result[a - 1] = (str2[b - 1] + str1[a - 1] - 48);
        }
      else
        {
          result[a - 1] = ((str2[b - 1] + str1[a - 1] - 48) - 10);
        }
      a = a - 1;
      b = b - 1;
    }
   my_putstr(result);
  my_putchar('\n');
  return (0);
}
int     addition(char *str1, char *str2)
{
  int   a;
  int   b;
  int   ret;
  char  *str_tp1;
  char  *str_tp2;
  char  *result;
 
  a = my_strlen(str1);
  b = my_strlen(str2);
  if (b > a)
    {
      my_swap(&a, &b);
      str_tp1 = malloc(a * sizeof(char) + 1);
      if (str_tp1 == NULL)
        return (1);
      str_tp2 = malloc(b * sizeof(char) + 1);
      if (str_tp2 == NULL)
        return (1);
      str_tp1 = str1;
      str_tp2 = str2;
      str1 = str_tp2;
      str2 = str_tp1;
    }
  addition_2(a, b, result, str2, str1, ret);
}
 
int     main(int argc, char **argv)
{
  if (argc != 3)
    {
      write(2, "Bad enter, retry\n", 24);
      return (0);
    }
  if (check_error(argv[1], argv[2]) == 1)
    return (0);
  addition(argv[1], argv[2]);
  return (0);
}