IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Probleme avec fonction binaire vers decimale


Sujet :

C

  1. #1
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut Probleme avec fonction binaire vers decimale
    Bonjour a tous

    Bon, voila, je suis entrain de coder un programme permettant de convertir un decimal en binaire puis vers d'autres bases (on vera ensuite ^^)

    Mais, j'ai un petit probleme lors de la conversion du binaire vers le decimal

    Lorsque, je tape 11 par exemple, j'ai une exception non gere dans ma fonction

    Voici le code

    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
    #include <stdio.h>
     
    int bin2dec(char *bin)
    {
        int dec = 0;
        while(*bin)
        {
            dec = (2 * dec) + (*bin - '0');
            bin++;
        }
        return dec;
    }
     
    void dec2bin(int dec, char *bin, int size)
    {
     
        int reste = 1, i;
        memset(bin, '0', size);
        for(i = (size-1); reste != 0; i--)
        {
            reste = dec / 2;
            *(bin+i) = (dec % 2) + '0';
            dec = reste;
        }
        *(bin+(size)) = '\0';
        return;
    }
     
    int menu ()
    {
        int choix = 0;
     
        while (choix <1 || choix > 6)
        {
            printf("-== Menu ==-\n\n");
            printf("1 : Decimal --> Binaire\n");
            printf("2 : Binaire --> Decimal\n");
            printf("3 : Decimal --> Hexadecimal\n");
            printf("4 : Hexadecimal --> Decimal\n");
            printf("5 : Binaire --> Hexadecimal\n");
            printf("6 : Hexadecimal --> Binaire\n\n");
            printf("Votre choix ?");
            scanf("%d", &choix);
            system("cls");
        }
        return choix;
     
    }
     
    int main(int argc, char *argv[])
    {
        char buf[256];
        int nb = 0;
        int caractere = 0;
        char binaire = 0;
     
        switch (menu())
        {
        case 1 :
     
            system("cls");
            printf("Choisissez un nombre decimal pour le convertir en binaire?\n\n");
     
            scanf("%d", &nb);
            printf("\n");
            dec2bin(nb, buf, 8);
            printf("%s\n\n", buf);
     
            printf ("\nAppuyez sur Entrer pour quitter\n");  // Fonction pour mettre en pause, d'ici
            getchar(caractere);
            getchar (); // Jusqu'ici
     
            break;
     
        case 2:
     
            system("cls");
            printf("Choisissez un nombre binaire pour le convertir en decimal?\n\n");
     
            scanf("%d", &nb);
            printf("\n");
            binaire = bin2dec(nb);
            printf("%d\n\n", binaire);
     
            printf ("\nAppuyez sur Entrer pour quitter\n");  // Fonction pour mettre en pause, d'ici
            getchar(caractere);
            getchar (); // Jusqu'ici
     
            break;
     
        }
    }
     
    /*Merci a kod32*/
    Les deux fonctions ne sont pas de moi, mais je compte faire celle sur l'hexa tout seul

    Merci de votre aide

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Bah déjà tu peux commencer par régler ce qui ne va pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    main.c:70: error: too many arguments to function 'getchar'
    main.c:82: warning: passing argument 1 of 'bin2dec' makes pointer from integer without a cast
    main.c:86: error: too many arguments to function 'getchar'

    getchar ne prend aucun paramètre, il renvoie le caractère.
    Ta fonction bin2dec attend un char* et toi tu lui envoie un int

  3. #3
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci

    Si, j'ai bien compris, la pause doit etre comme sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf ("\nAppuyez sur Entrer pour quitter\n");  // Fonction pour mettre en pause, d'ici
    		getchar (); // Jusqu'ici
    Sauf, que dans ce cas là, le programme quitte tout de suite, on ne peut pas voir le resultat

    POur l'histoire de int et de char, je dois envoyer un char pour ma fonction bin2dec, donc int nb devient char nb ?

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 090
    Par défaut
    Le programme quitte tout de suite car ton buffer clavier n'est pas vide.

    Pour ce qui est du int au lieu du char* :

    On envoie une chaine de caractere au lieu d'un nombre pour traiter (beaucoup) plus facilement la conversion.

    Et ce n'est pas un char (un caractere), mais un char* (une chaine de caractere terminé par '\0').

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de ton aide

    Pour vider le buffer, j'ai mis

    avant le getchar();

    Mais pour ce qui est du probleme avec le char, je ne vois pas
    J'ai mis

    à la place de

    Mais se ne marche toujours pas :/

    Voici le code complet

    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
    99
    100
    101
    102
    103
    104
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int bin2dec(char *bin)
    {
        int dec = 0;
        while(*bin)
        {
            dec = (2 * dec) + (*bin - '0');
            bin++;
        }
        return dec;
    }
     
    void dec2bin(int dec, char *bin, int size)
    {
     
        int reste = 1, i;
    	memset(bin, '0', size);
        for(i = (size-1); reste != 0; i--)
        {
            reste = dec / 2;
            *(bin+i) = (dec % 2) + '0';
            dec = reste;
        }
        *(bin+(size)) = '\0';
        return;
    }
     
    int menu ()
    {
    	int choix = 0;
     
    	while (choix <1 || choix > 6)
    	{
    		printf("-== Menu ==-\n\n");
    		printf("1 : Decimal --> Binaire\n");
    		printf("2 : Binaire --> Decimal\n");
    		printf("3 : Decimal --> Hexadecimal\n");
    		printf("4 : Hexadecimal --> Decimal\n");
    		printf("5 : Binaire --> Hexadecimal\n");
    		printf("6 : Hexadecimal --> Binaire\n");
    		printf("Votre choix ?");
    		scanf("%d", &choix);
    		system("cls");
    	}
    	return choix;
     
    }
     
    int main()
    {
    	char buf[256];
    	char* nb;
     
    	switch (menu())
    	{
    	case 1 :
     
    		system("cls");
    		printf("Choisissez un nombre decimal pour le convertir en binaire\n\n");
     
    		scanf("%d", &nb);
    		printf("\n");
    		dec2bin(nb, buf, 8);
    		printf("%s\n\n", buf);
     
    		printf ("\nAppuyez sur Entrer pour quitter\n");  // Fonction pour mettre en pause, d'ici
    		fflush(stdin);
    		getchar (); // Jusqu'ici
     
    		break;
     
    	case 2:
     
    		system("cls");
    		printf("Choisissez un nombre binaire pour le convertir en decimal\n\n");
     
    		scanf("%d", &nb);
    		printf("\n");
    		printf("%d\n\n", bin2dec(nb));
     
    		printf ("\nAppuyez sur Entrer pour quitter\n");  // Fonction pour mettre en pause, d'ici
    		fflush(stdin);
    		getchar (); // Jusqu'ici
     
    		break;
     
    	case 3 :
     
    		system("cls");
    		printf("Choisissez un nombre decimal pour le convertir en hexadecimal\n\n");
     
     
    		printf ("\nAppuyez sur Entrer pour quitter\n");  // Fonction pour mettre en pause, d'ici
    		getchar (); // Jusqu'ici
     
    		break;
    	}
    	return 0;
    }
     
    /*Merci a kod32*/

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonsoir.

    Citation Envoyé par Antoinejdu44 Voir le message
    Pour vider le buffer, j'ai mis

    Mauvaise idée, voir dans la FAQ :
    Pourquoi ne faut-il pas utiliser fflush(stdin) pour vider le buffer clavier ?
    Comment vider le buffer clavier ?

    Quelques petites corrections et commentaires du premier code :

    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <stdio.h>
    #include <stdlib.h> /* pour system (); */
     
    void clean_stdin (void);
    void clear_screen (void);
    void pause (void);
    int menu (void);
    int bin2dec(char*);
    void dec2bin (int, char*, int);
     
    int main (void) /* void quand main ne prend pas de paramètres */
    {
        char buf[256];
        int nb = 0;
        int caractere = 0;
        char binaire = 0;
        clear_screen ();
        switch (menu())
        {
            case 1 :
                printf("Choisissez un nombre decimal pour le convertir en binaire?\n\n");
                scanf("%d", &nb);
                printf("\n");
                dec2bin(nb, buf, 8);
                printf("%s\n\n", buf);
                break;
            case 2:
                printf("Choisissez un nombre binaire pour le convertir en decimal?\n\n");
                scanf("%d", &nb);
                printf("\n");
                binaire = bin2dec(nb);
                printf("%d\n\n", binaire);
                break;
        }
        clean_stdin ();
        pause ();
        return 0; /* à ne pas oublier */
    }
     
    void clean_stdin (void) /* procédure pour vider la mémoire tampon du clavier (issue de la FAQ) */
    {
        int c;
        do {
            c = getchar();
        } while (c != '\n' && c != EOF);
    }
     
    void clear_screen (void)
    {
        system ("cls"); /* pas portable mais au moins, on n'a qu'une seule ligne à modifier */
        /* clear pour Linux */
    }
     
    void pause (void)
    {
        printf ("\nAppuyez sur Entrer pour continuer ...\n");
        getchar ();
        /* getchar (); ne prend pas de paramètres, pour affecter à une variable, on fait comme ceci :
        var = getchar (); */
    }
     
    int bin2dec(char *bin)
    {
        int dec = 0;
        while(*bin)
        {
            dec = (2 * dec) + (*bin - '0');
            bin++;
        }
        return dec;
    }
     
    void dec2bin (int dec, char *bin, int size)
    {
     
        int reste = 1, i;
        /* memset(bin, '0', size); fonction inéxistante */
        for(i = (size-1); reste != 0; i--)
        {
            reste = dec / 2;
            *(bin+i) = (dec % 2) + '0';
            dec = reste;
        }
        *(bin+(size)) = '\0';
        /* pas de return dans une procédure ... */
    }
     
    int menu (void) /* void quand la fonction ne prend pas de paramètres (sinon elle peut prendre une infinité de paramètres) */
    {
        int choix = 0;
     
        while (choix <1 || choix > 6)
        {
            printf("-== Menu ==-\n\n");
            printf("1 : Decimal --> Binaire\n");
            printf("2 : Binaire --> Decimal\n");
            printf("3 : Decimal --> Hexadecimal\n");
            printf("4 : Hexadecimal --> Decimal\n");
            printf("5 : Binaire --> Hexadecimal\n");
            printf("6 : Hexadecimal --> Binaire\n\n");
            printf("Votre choix ?");
            scanf("%d", &choix);
            clean_stdin ();
            pause ();
        }
        return choix;
    }
    Cordialement,
    Idriss

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 411
    Par défaut
    Ces fonctions ne convertissent pas de binaire en décimal, mais de notation binaire en nombre. Un nombre qui peut ensuite être convertit en notation décimale ou en notation hexadécimale.
    Code C : 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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <stdio.h>
    #include <stdlib.h> /* pour system (); */
     
    void clean_stdin (void);
    void clear_screen (void);
    void pause (void);
    int menu (void);
    int bin2nbr(char const*);
    void nbr2bin(int, char*, size_t);
     
    int main (void) /* void quand main ne prend pas de paramètres */
    {
        char buf[256];
        int nb = 0;
        int caractere = 0;
        clear_screen ();
        switch (menu())
        {
            case 1 :
                printf("Choisissez un nombre decimal pour le convertir en binaire?\n\n");
                scanf("%d", &nb); /*Lecture décimale + conversion en nombre*/
                printf("\n");
                nbr2bin(nb, buf, 8); /*Conversion du nombre en notation binaire*/
                printf("%s\n\n", buf);
                break;
            case 2:
                printf("Choisissez un nombre binaire pour le convertir en decimal?\n\n");
                scanf("%10s", buf); /*Lecture binaire*/
                printf("\n");
                nb = bin2nbr(buf); /*Conversion en nombre*/
                printf("%d\n\n", nb); /*Affichage en notation décimale*/
                break;
        }
        clean_stdin ();
        pause ();
        return 0; /* à ne pas oublier */
    }
     
    void clean_stdin (void) /* procédure pour vider la mémoire tampon du clavier (issue de la FAQ) */
    {
        int c;
        do {
            c = getchar();
        } while (c != '\n' && c != EOF);
    }
     
    void clear_screen (void)
    {
        system ("cls"); /* pas portable mais au moins, on n'a qu'une seule ligne à modifier */
        /* clear pour Linux */
    }
     
    void pause (void)
    {
        printf ("\nAppuyez sur Entrer pour continuer ...\n");
        getchar ();
        /* getchar (); ne prend pas de paramètres, pour affecter à une variable, on fait comme ceci :
        var = getchar (); */
    }
     
    int bin2nbr(char const *bin)
    {
        int dec = 0;
        while(*bin)
        {
            dec = (2 * dec) + (*bin - '0');
            bin++;
        }
        return dec;
    }
     
    void nbr2bin (int dec, char *bin, size_t size)
    {
     
        int reste = 1;
        size_t i;
        /* memset(bin, '0', size); fonction inéxistante */
        for(i = (size-1); reste != 0; i--)
        {
            reste = dec / 2;
            *(bin+i) = (dec % 2) + '0';
            dec = reste;
        }
        *(bin+(size)) = '\0';
        /* pas de return dans une procédure ... */
    }
     
    int menu (void) /* void quand la fonction ne prend pas de paramètres (sinon elle peut prendre une infinité de paramètres) */
    {
        int choix = 0;
     
        while (choix <1 || choix > 6)
        {
            printf("-== Menu ==-\n\n");
            printf("1 : Decimal --> Binaire\n");
            printf("2 : Binaire --> Decimal\n");
            printf("3 : Decimal --> Hexadecimal\n");
            printf("4 : Hexadecimal --> Decimal\n");
            printf("5 : Binaire --> Hexadecimal\n");
            printf("6 : Hexadecimal --> Binaire\n\n");
            printf("Votre choix ?");
            scanf("%d", &choix);
            clean_stdin ();
            pause ();
        }
        return choix;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de votre aide

    Je regarde tout sa

    Edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     scanf("%10s", buf); /*Lecture binaire*/
    Pourquoi mettre %10s ??

    Sans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memset(bin, '0', size);
    Devant la conversion, j'ai une suite de caractères non initialisés

    Ils ressemblent gros modo a sa : ||-

    La fonction nbr2bin ne marche pas bien

    Lorsque je mets 1111 (qui fait 15), j'obtiens 11910

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    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
    void nbr2bin (int dec, char *bin, size_t size)
    {
    	size_t i;
    	int multiplicateur = 1;
     
    	for (i = 1 ; i < size ; i++)
    		multiplicateur *= 2;
     
    	for( i = 0 ; i < size ; i++ )
    	{
    		if ( dec >= multiplicateur )
    		{
    			*bin = '1';
    			dec = dec - multiplicateur ;
    		}
    		else
    			*bin = '0';
     
    		multiplicateur /= 2;
    		bin++;
    	}
    	*bin = 0;
    }

  10. #10
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Pourquoi ne pas faire une fonction générique ?
    Un peu dans ce style là :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <math.h>
     
    void convert(char * str, int nb, int base) {
    	int tmp = nb % base;
    	if (nb >= base)
    		convert(str-1, nb/base, base);
    	*str = tmp + ((tmp < 10) ? '0' : 'A'-10);
    }
     
    char * int_to_string(char * str, int nb, int base) {
    	int len;
    	int sig = (nb < 0) ? -1 : 1;
    	nb *= sig;
    	len = log(nb) / log(base);
    	if (sig == -1) {
    		*str = '-';
    		len++;
    	}
    	convert(str + len, nb, base);
    	str[len+1] = '\0';
    	return str;
    }
     
    int string_to_int(char * str, int base) {
    	int nb = 0;
    	int sig = (*str == '-') ? -1 : 1;
     
    	if (sig == -1)
    		str++;
     
    	for ( ; *str; str++) {
    		nb *= base;
    		nb += ((isalpha(*str)) ? (tolower(*str) - 'a' + 10) : (*str - '0'));
    	}
     
    	return nb * sig;
    }
     
    int main(void) {
    	char str[100] = "";
    	int nb = 50;
    	printf("%s\n", int_to_string(str, nb, 2));
    	printf("%d\n", string_to_int("ABCD", 16));
    	return EXIT_SUCCESS;
    }
    Pour le %10s c'est pour lire jusqu'à 10 caractères maximum

  11. #11
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de ton aide Pouet_forever, mais c'est compliqué comme code :/

    Je ne suis qu'un debutant et je n'ai pas trop le temps de taffer sur du C (j'suis en seconde )

    Sinon, j'ai resolu le probleme de ma fonction, voici une partie du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	case 2:
    
    		printf("Choisissez un nombre binaire pour le convertir en decimal\n\n");
    
    		scanf("%10s", &nb);
    		printf("\n");
    		printf("%d\n\n", bin2nbr(&nb));
    
    		break;
    Par contre, lorsque je quitte le programme après avoir utilise cette fonction (seulement pour un binaire qui a plus de 3 chiffres, soit 7 max en décimal), il y a une erreur :

    Run-Time Check Failure #2 - Stack around the variable 'nb' was corrupted.
    :/

  12. #12
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Ta fonction bin2nbr attend un un 'char*' et pas un 'int*'. Il faut que tu lui envoies buf et pas nb

  13. #13
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Mais buf ne varie pas ?? nb est le nombre donné par l'user
    Je ne comprend comme buf peut devenir le nombre donné par l'user ?

  14. #14
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Comme ça tout simplement : scanf("%10s", buf);

  15. #15
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Quelle est la définition de nb dans ton code ? Il est surprenant que tu doives mettre &nb comme argument de tes fonctions.

  16. #16
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    nb est une variable defini par l'user
    C'st le nombre qui doit etre converti selon son choix

  17. #17
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est la valeur de nb qui est donné par l'utilisateur. Le programmeur a défini, lui, un type pour cette variable. Quel est-il ?

  18. #18
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Comment sa un type ?

    Si, c'est un char*, int ... ?

  19. #19
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Antoinejdu44 Voir le message
    Comment sa un type ?

    Si, c'est un char*, int ... ?
    Oui !
    As-tu char * nb (initialisé comment ?) ou int nb ou char nb[...] ...

  20. #20
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Oui, il y a

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Mail] probleme avec fonction mail() !!!
    Par H-bil dans le forum Langage
    Réponses: 6
    Dernier message: 19/06/2006, 23h45
  2. C++ - Probleme avec fonction virtuelle
    Par vdumont dans le forum C++
    Réponses: 1
    Dernier message: 20/03/2006, 20h49
  3. probleme avec fonctions
    Par Burinho dans le forum C
    Réponses: 8
    Dernier message: 29/12/2005, 21h28
  4. Réponses: 17
    Dernier message: 24/03/2005, 12h24
  5. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo