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 :

Problème avec les fonctions.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut Problème avec les fonctions.
    Bonjour,
    je souhaite faire un code qui laisse le choix à l'utilisateur entre une conversion binaire décimal ou l'inverse. Chaque fonction prise isolement fonctionne mais dans le cas ou je les assemble ca ne marche plus. Pourquoi ?

    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
    #include <stdio.h>
    /****************************************************/
    /*                                                  */
    /* fonction qui convertit un binaire en décimal     */
    /*                                                  */
    /****************************************************/
    int convertiseurBinaireDecimal()
    {
    	char leBinaire;
    	int leDecimal = 0;
    	do
    	{
    		scanf("%c",&leBinaire);
    		if (leBinaire == '1')
    			leDecimal = leDecimal * 2 + 1;
    		else if (leBinaire == '0')
    			leDecimal *= 2;
    	}
    	while (leBinaire != '\n');
    	printf("%d\n", leDecimal);
    	return leDecimal;
    }
     
    /****************************************************/
    /*                                                  */
    /* fonction qui convertit un décimal en binaire     */
    /*                                                  */
    /****************************************************/
    int convertiseurDecimalBinaire()
    {
       int leDecimal;
       int leBinaire = 2;
       scanf("%d", &leDecimal);
       while (leBinaire <= leDecimal)
          leBinaire *= 2;
       leBinaire /= 2;
       while (leBinaire != 0)
       {
          if (leBinaire <= leDecimal)
          {
             printf("1");
             leDecimal -= leBinaire;
          }
          else
             printf("0");
          leBinaire /= 2;
       }
       printf("\n");
       return leBinaire;
    }
    /****************************************************/
    /*                                                  */
    /*     fonction faire un choix                      */
    /*                                                  */
    /****************************************************/
    /*int faireUnChoix()
    {
    	int leChoix;
    	printf("Pour convertir un binaire en decimal taper 1:\n");
    	printf("Pour convertir un decimal en binaire taper 2:\n");
    	scanf("%d",&leChoix);
    	return leChoix;
    }*/
     
    int main(void)
    {
    	int leChoix;
    	/*faireUnChoix();*/
    	printf("Pour convertir un binaire en decimal taper 1:\n");
    	printf("Pour convertir un decimal en binaire taper 2:\n");
    	if (leChoix = 1)
    		convertiseurBinaireDecimal();
    	else if (leChoix = 2)
    		convertiseurDecimalBinaire();
    	return 0;
    }
    Merci.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    en C, = est une ASSIGNATION
    une comparaison se fait avec ==

  3. #3
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    j'ai fait la correction mais les fonctions ne s'executent pas.
    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
    #include <stdio.h>
    /****************************************************/
    /*                                                  */
    /* fonction qui convertit un binaire en décimal     */
    /*                                                  */
    /****************************************************/
    int convertiseurBinaireDecimal()
    {
    	char leBinaire;
    	int leDecimal = 0;
    	do
    	{
    		scanf("%c",&leBinaire);
    		if (leBinaire == '1')
    			leDecimal = leDecimal * 2 + 1;
    		else if (leBinaire == '0')
    			leDecimal *= 2;
    	}
    	while (leBinaire != '\n');
    	printf("%d\n", leDecimal);
    	return leDecimal;
    }
     
    /****************************************************/
    /*                                                  */
    /* fonction qui convertit un décimal en binaire     */
    /*                                                  */
    /****************************************************/
    int convertiseurDecimalBinaire()
    {
       int leDecimal;
       int leBinaire = 2;
       scanf("%d", &leDecimal);
       while (leBinaire <= leDecimal)
          leBinaire *= 2;
       leBinaire /= 2;
       while (leBinaire != 0)
       {
          if (leBinaire <= leDecimal)
          {
             printf("1");
             leDecimal -= leBinaire;
          }
          else
             printf("0");
          leBinaire /= 2;
       }
       printf("\n");
       return leBinaire;
    }
    /****************************************************/
    /*                                                  */
    /*     fonction faire un choix                      */
    /*                                                  */
    /****************************************************/
    /*int faireUnChoix()
    {
    	int leChoix;
    	printf("Pour convertir un binaire en decimal taper 1:\n");
    	printf("Pour convertir un decimal en binaire taper 2:\n");
    	scanf("%d",&leChoix);
    	return leChoix;
    }*/
     
    int main(void)
    {
    	int leChoix;
    	/*faireUnChoix();*/
    	printf("Pour convertir un binaire en decimal taper 1:\n");
    	printf("Pour convertir un decimal en binaire taper 2:\n");
    	scanf("%d",&leChoix);
    	if (leChoix == 1)
    		convertiseurBinaireDecimal();
    	else if (leChoix == 2)
    		convertiseurDecimalBinaire();
    	return 0;
    }

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    maintenant tu as le problème avec scanf... fonction fortement déconseillée..

    Utilises fgets , et enlève le "\n" à la fin du buffer...

  5. #5
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    Merci beaucoup,
    Je vais étudier cette fonction fgets, car ne ne l'ai jamais utilisée.
    J'ai l'impression que je vais devoir écrire à nouveau les fonctions.

  6. #6
    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 emprex Voir le message
    J'ai l'impression que je vais devoir écrire à nouveau les fonctions.
    Non, C'est un problème d'entrée au clavier : Lorsque tu fais un choix 1 ou 2 dans main, il reste dans le buffer du clavier le \n tapé pour terminer la ligne.
    Le scanf ("%c",...) de convertiseurBinaireDecimal() lit un caractère, trouve ce \n et se termine aussitôt.
    Si tu entres au clavier
    1 1111000
    au lieu d'essayer d'entrer
    1
    11110000
    tu obtiendras la réponse 240 qui est correcte.
    Le problème ne se pose pas pour le scanf("%d",...) de convertiseurDecimalBinaire parce que tu lis un entier et que les séparateurs qui précèdent la valeur sont dans ce cas sautés.

    La solution est de purger le buffer d'entrée après le scanf du main. (rechercher fclean() par exemple sur le forum)

    Indépendamment, étudier fgets est une bonne chose. Tu en auras besoin rapidement.

Discussions similaires

  1. Problèmes avec les fonctions et replace
    Par Tommyl dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 01/12/2006, 21h34
  2. Problème avec les fonctions
    Par gizida dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/07/2006, 14h15
  3. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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