Soyez le premier à donner votre avis sur cette source.
Vue 2 868 fois - Téléchargée 91 fois
#include <stdio.h> #include <string.h> #include <math.h> // powaaaaaaaa // WAAIIIII // J'ai trouvez comment calculer les puissances // en titillant math.h // c'est pow(nombre,exposant); // pour info les valeur absolues des long #define SIG_MIN -2147483648 // signe min #define SIG_MAX 2147483647 // signe max #define UNSIG_MIN 0 // pas signe nul #define UNSIG_MAX 4294967295 // pas signe max int is_chiffre(char car); int car_chiffre(char car); unsigned long chaine_nombre(char *chaine); int verifier_chaine(char *chaine); int main(int argc, char *argv[]){ char *chaine = ""; // chaine unsigned long nombre; // nombre printf("note de l'auteur :\n"); // eko printf("il n'y a qu'en faisant des erreurs qu'on apprend\n"); // eko printf("alors merci a ceux qui on m'ont aide a 'reparer' l'ancienne source"); // eko if(argc != 2){ // 2 arguments printf("utilisation : conv [nombre]"); // eko return 0; // exit } if(!verifier_chaine(argv[1])){ // pas un nombre printf("erreur : la valeur doit etre numerique."); // eko return 0; // exit } chaine = argv[1]; // recupere la chaine printf("Chaine : %s\n", chaine); // eko nombre = chaine_nombre(chaine); // convertir printf("Nombre : %d\n", nombre); // eko } // fonction de convertisassionnement unsigned long chaine_nombre(char *chaine){ unsigned long resultat = 0;// nombre final unsigned long nombre = 0; // avant les E10 int i; // boucle int j; // boucle int len = strlen(chaine); // longueur de la chaine for(i = 0; i < len; i++){ // pour chaque car nombre = 0; // initialise // prend la valeur numerique du car en partant de droite // note : // j'ai pas compris : // faire un pointeur sur une chaine de caractere // puis l'incrementer au lieu de faire a chaque fois [i] nombre = car_chiffre(chaine[len - i - 1]); nombre *= pow(10,i); // puissance de 10 resultat += nombre; // ajoute } return resultat; // retourne le nombre final (long) } // verifie si tous les caractere sont des chiffres int verifier_chaine(char *chaine){ int i; // boucle for(i = 0; i < strlen(chaine); i++){ // pour chaque car if(!is_chiffre(chaine[i])){ // si pas chiffre return 0; // bye ... } } return 1; } // verifie si le caractere est un chiffre int is_chiffre(char car){ if(car >= '0' && car <= '9'){ return 1; // oui }else{ return 0; // non } } // convertion du caractere en chiffre int car_chiffre(char car){ // wesh merci a JCDjcd // ca c'est un truc auquel j'aurai jamais pense // comme on a deja verifie que c'est un chiffre // on retourne la valeur du car moins celle de 0 return car - '0'; }
{
char *c = source;
unsigned long n = 0;
while(*c >= 48 && *c <= 57) {
n *= 10;
n += (*c - 48);
c++;
}
return n;
}
ciao...
ca fait plaisir et ca motive! :-D
note : je ne savais pas que atol(); existait ...
on m'avait parle que de atoi();
je sais que j'ai un peu abuse avec les switch (lol :)
et que les break; apres return ca sert pas vraiment ...
les 2 boucle pour convertir une chaine en nombre c'est pour les puissance 10 et je sais pas faire les puissances en c !
selon sa position il multiplie par 10
promis je refais ca tout de suite.
nouveau cahier des charges:
unsigned long chaine_nombre(char *chaine){
unsigned long nombre = 0; // nombre final
// AUCUN strlen utile
// AUCUN appel de fonction externe
// 1 SEULE boucle par pointeur et valeur directe en sortie
return nombre; // retourne le nombre final (long)
}
Nous attendons la nouvelle mouture.
ciao...
Et je ne comprend pas pourquoi tu as besoin de 2 boucles pour convertir une chaine en un monbre ?
Ca se programme :
nombre += nombre_temp; // ajoute
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.