[C] fonction de conversion sur des tableaux de caractères.
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

[C] fonction de conversion sur des tableaux de caractères.



  1. #1
    Cech

    [C] fonction de conversion sur des tableaux de caractères.


    ------

    Salut à tous !

    Je dois réaliser des fonctions de conversions sur des tableaux de caractères et la dimension des tableaux me posent beaucoup de soucis !
    Par exemple :
    Code:
    int hex2dec(char h[9]){
        int sum=0,i=0;
        for(;i!='\0';i++){
            sum+= (chiffre2val(h[i])*power(16,i));
        }
        return sum;
    Avec chiffre2val une fonction qui convertie E en 14 par exemple et power une fonction puissance que j'ai crée à la main pour des int.
    Ici on rentre un nombre hexadécimal dans un tableau et la fonction renvoie un décimal.

    Cette fonction est tout bête mais elle me renvoie 0 tout le temps. Alors j'ai essayé de faire i<9 et bien entendu j'ai obtenu un nombre énorme...

    D'où vous pensez que vient le souci ?

    -----
    Dernière modification par Cech ; 06/02/2016 à 09h24.

  2. #2
    Cech

    Re : [C] fonction de conversion sur des tableaux de caractères.

    J'ai encore plus drôle.

    Pour cette fonction :
    Code:
    dec2bin (int n, char b[33]){
        int i=0,j=0,bin[33];for(;n!=0;i++){
            bin[i]=(n%2);
            n = (int) n/2;
            j++;
        }
        for(i=0;i<j;i++){
            printf("%d",bin[j-(i+1)]);
        }
    }
    Cette fonciton converti un décimal en binaire et tout se passe pour le mieux du monde. Néanmoins dès que j'essaye d'utilise b[33] alors ça bug... Si j'effectue printf("%c",b[i]) alors j'obtient des carrés bizarres de même pour putchar(b[i]) bref.

    Pourtant le tableau char est passé en argument dans ma fonction il me semble impératif que je l'utilise... Voyez-vous comment je peux faire ?

  3. #3
    albanxiii
    Modérateur

    Re : [C] fonction de conversion sur des tableaux de caractères.

    Bonjour,

    Citation Envoyé par Cech Voir le message
    Ici on rentre un nombre hexadécimal dans un tableau et la fonction renvoie un décimal.
    Pourquoi ne pas utiliser la fonction atoh ?

    Citation Envoyé par Cech Voir le message
    dès que j'essaye d'utilise b[33] alors ça bug...
    Je n'ai pas trop compris ce que vous faites, mais si b est défini en tant que char b[33], vous ne pouvez utiliser que b[0] à b[32]. A b[33], vous tapez à côté.

    @+
    Not only is it not right, it's not even wrong!

  4. #4
    Chanur

    Re : [C] fonction de conversion sur des tableaux de caractères.

    Bonjour,

    Pour la première : tu initialises i et ta valeur de retour à 0, puis, tant que i est différent de 0 tu boucles (donc tu ne boucles pas puisque i vaut 0 dès le début) et tu retourne 0.
    Tout va bien, donc.

    Pour la deuxième, je ne suis pas sûr d'avoir compris le cas qui ne marche pas.
    Si c'est d'utiliser la case b[33], elle est en dehors du tableau (33 cases => indice de 0 à 32).
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : [C] fonction de conversion sur des tableaux de caractères.

    i!='\0' est aussi étonnant puisqu'on compare un entier avec un char dont le code ascii est 0.

    Cela devrait sans doute être h[i]!='\0' qui s'écrit habituellement h[i]!=0 mais là aussi, la boucle serait potentiellement fausse si h ne contient aucun caractère à 0.
    Dernière modification par pm42 ; 06/02/2016 à 10h52.

  7. #6
    Jack
    Modérateur

    Re : [C] fonction de conversion sur des tableaux de caractères.

    int hex2dec(char h[9])
    On ne déclare jamais de tableau dans la liste des arguments d'une fonction. On passe son adresse et le nombre d'éléments à traiter.
    Dernière modification par Jack ; 06/02/2016 à 11h23.

  8. #7
    Cech

    Re : [C] fonction de conversion sur des tableaux de caractères.

    Re!

    Selon vos conseils (enfin ceux que j'ai compris) j'ai retapé ma fonction et j'ai fait un schéma de ce qui doit se passer selon moi.

    Déjà voici ma fonction :
    Code:
     bin2dec(char b[33]){
        int sum=0,i=0,j=0;
        do{j++;i++;}while(b[i]!='\0');
        for(i=0;i<j;i++){
        sum+=(b[(j-1)-i]*power(2,i));
        }
        return sum;
    }
    Elle converti un nombre binaire entré en dans un tableau en nombre décimale. (Un des conseils est "On ne déclare jamais de tableau dans la liste des arguments d'une fonction. On passe son adresse et le nombre d'éléments à traiter." mais veillez accepter mes excuses, c'est la fonction du prof, je ne peux pas y toucher je suppose).

    Schéma : Pour moi voici ce qu'il se passe.
    Dans main je rentre 11101 soit b[0]...b[4]
    Dans ma fonction j=5.
    Alors elle effectue b[4]*2^0 + b[3]*2^1 + ... b[0]*2^4
    Elle renvoit 29.

    Mais non... Elle renvoit 1517... J'ai du raté un truc !

  9. #8
    Cech

    Re : [C] fonction de conversion sur des tableaux de caractères.

    J'ai remarqué un fait très intéressant.

    Cette fonction quasiment identique fonctionne :
    Code:
    hex2dec(char h[9]){
        int sum=0,i=0,j=0;
        do{j++;i++;}while(h[i]!='\0');
        for(i=0;h[i]!='\0';i++){
            sum+= (chiffre2val(h[(j-1)-i])*power(16,i));
        }
        return sum;
    Ce pourrait-il donc que dans la fonction précédent b[1] ne continent pas 1 ? Hum...

  10. #9
    Cech

    Re : [C] fonction de conversion sur des tableaux de caractères.

    Ce que je cherche à faire pour ce :
    Code:
    void dec2bin (int n, char b[33]){
        int i=0,j=0,bin[33];for(;n!=0;i++){
            bin[i]=(n%2);
            n = (int) n/2;
            j++;
        }
        for(i=0;i<j;i++){
            printf("%d",bin[j-(i+1)]); //fontionne mais sans le b[33];
        }
    }
    est simple, j'ai trouvé une fonction qui marche mais j'aimerais la modifier pour qu'elle travaille avec b (char b[33]) parce que le prof attend ça de moi j'imagine... Mais le souci c'est que autant avec mon tableau int tout va bien mais avec son tableau char je n'y arrive pas... Qu'en pensez vous ?

  11. #10
    Jack
    Modérateur

    Re : [C] fonction de conversion sur des tableaux de caractères.

    (Un des conseils est "On ne déclare jamais de tableau dans la liste des arguments d'une fonction. On passe son adresse et le nombre d'éléments à traiter." mais veillez accepter mes excuses, c'est la fonction du prof, je ne peux pas y toucher je suppose).
    Et il est prof de quoi exactement?

  12. #11
    Bluedeep

    Re : [C] fonction de conversion sur des tableaux de caractères.

    Citation Envoyé par Jack Voir le message
    Et il est prof de quoi exactement?
    Excellent !

Discussions similaires

  1. Conversion chaîne de caractères en double
    Par Shadowlugia dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 22/10/2012, 14h22
  2. [C] Fonction et tableaux
    Par invite3f95ae44 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 19/12/2011, 12h55
  3. tableaux et fonction
    Par invite64056dd8 dans le forum Programmation et langages, Algorithmique
    Réponses: 23
    Dernier message: 22/09/2011, 16h09
  4. Réponses: 1
    Dernier message: 10/08/2010, 17h26
  5. Trouver des "paterns" de caractères dans un fichier de 3000 caractères ou plus.
    Par invitec529fad8 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 20/03/2010, 23h30