j'ai construire un petit programme qui convertirait le tableau de caractères donné à un nombre entier:Conversion d'un nombre entier multidigital à partir d'un tableau de caractères en un entier
#include <stdio.h>
int char_to_int(char* value);
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Illegal argument count!");
return 1;
}
printf("As char array: %s\n", argv[1]);
printf("As integer: %i", char_to_int(argv[1]));
return 0;
}
int char_to_int(char* value)
{
return *value - '0';
}
Le problème est que quand je rentre dans un numéro multidigital la nombre entier se compose uniquement d'un nombre à un chiffre, ce qui est logique, mais je n'ai aucune idée sur la façon de réécrire le code. Et je ne sais pas non plus pourquoi seul le premier personnage est converti. Je sais que c'est un truc assez basique, mais j'aimerais savoir comment l'implémenter correctement.
Je voudrais également éviter d'utiliser la fonction ato() dans la liste STL.
Code avec Reworked gestion des erreurs:
#include <stdio.h>
int char_to_int(char* value);
int illegal_conversion = 0;
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Illegal argument count!");
return 1;
}
int result = char_to_int(argv[1]);
if (illegal_conversion)
{
printf("Illegal arguments");
return 1;
}
printf("As char array: %s\n", argv[1]);
printf("As integer: %i", result);
return 0;
}
int char_to_int(char* value)
{
int result = 0;
int negative_integer = 0;
while (*value)
{
if (*value == 43)
{
*value++;
continue;
}
else if (*value == 45)
{
*value++;
negative_integer = 1;
continue;
}
else if (*value < 48 || *value > 57)
{
illegal_conversion = 1;
return 1;
}
result *= 10;
result += *value++ - '0';
}
if (negative_integer)
result *= -1;
return result;
}
Qu'en est-il de la fonction 'atoi()' à convertir? –
Ouais c'est une autre chose que je devais mentionner. Je voudrais éviter cette fonction puisque je veux implémenter cette conversion moi-même. Mais merci de mentionner. –
@J ... S peut-être qu'il veut apprendre :) –