Si vous devez prendre en compte des nombres négatifs, vous aurez peut-être besoin d'une logique supplémentaire. En fait, lorsque vous jouez avec des tableaux, vous ne connaissez pas la taille d'upfront, vous pouvez vouloir faire plus de vérification de sécurité, et ajouter une API pour gérer la structure des données est très pratique aussi.
// returns the number of digits converted
// stores the digits in reverse order (smalles digit first)
// precondition: outputdigits is big enough to store all digits.
//
int convert(int number, int* outputdigits, int* signdigit) {
int* workingdigits = outputdigits;
int sign = 1;
if(number < 0) { *signdigit = -1; number *= -1; }
++workingdigits;
for (; number > 0; ++ workingdigits) {
*workingdigits = number % 10;
number = number/10;
}
return workingdigits - outputdigits;
}
void printdigits(int* digits, int size, int signdigit) {
if(signdigit < 0) printf("-");
for(int* digit = digits+size-1; digit >= digits; --digit){
printf("%d", *digit);
}
}
int main() {
int digits[10];
int signdigit;
printdigits(digits, convert(10, digits, &signdigit), signdigit);
printdigits(digits, convert(-10, digits, &signdigit), signdigit);
printdigits(digits, convert(1005, digits, &signdigit), signdigit);
}
Pourquoi cette fonction est-elle un pointeur char? Et que fait le nouveau caractère [longueur]? Cela ressemble à un pointeur sur le premier index du tableau, mais mon compilateur ne semble pas aimer 'new char' – droseman
'new char' est C++ speak. La bonne façon de le faire en C est le deuxième bit de code. –
Aussi, il est important qu'à la fin de votre programme, vous appeliez 'free()' sur n'importe quel tableau de cette fonction. Sinon, vous perdez de la mémoire. –