permutation de deux variables
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

permutation de deux variables



  1. #1
    mril232

    permutation de deux variables


    ------

    Bonjour,
    Je veux permuter de variable de type char a l'aide d'une fonction mais quand je compile le programme suivant il y a l'affichage d'un seul caractère

    Programme:
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    void echanger(char*a,char*b)
    {
         char aide;
         aide=*a;
         *a=*b;
         *b=aide;
         
    }
    
          main()
          {
                char *a,*b;
                a=(char*)malloc(sizeof(char));
                b=(char*)malloc(sizeof(char));
                printf("saisir le premier\n");
                scanf("%c",*a);
                printf("saisir le deuxième\n");
                scanf("%c",*b);
                echanger(a,b);
                printf("%c%c",*a,*b);
                system("pause");
          }

    -----
    Dernière modification par Jack ; 28/12/2012 à 15h05.

  2. #2
    Jack
    Modérateur

    Re : permutation de deux variables

    Mais pourquoi ne faites-vous pas l'effort de lire les règles participatives de ce forum:
    - balises code
    - langage
    - etc.

  3. #3
    Jack
    Modérateur

    Re : permutation de deux variables

    Code:
                scanf("%c",*a);
    scanf attend l'adresse de la variable alors que tu fournis la variable elle-même. Essaie avec
    Code:
                scanf("%c",a);
    , ça ira mieux

  4. #4
    mril232

    Re : permutation de deux variables

    Même si, il y a l'affichage et la saisi que du premier caractère saisi.

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

    Re : permutation de deux variables

    Voici la fenêtre du compilateur:
    Nom : Capture.jpg
Affichages : 451
Taille : 72,7 Ko

  7. #6
    Jack
    Modérateur

    Re : permutation de deux variables

    Dans tous les cas, quand o lit des caractères avec scanf, il faut purger le buffer clavier qui dans ton cas contient encore le caractère de saut de ligne). Sous windows, un fflush(stdin) fonctionne, mais la norme ne le garantit pas.
    Sinon, voici comment procéder:http://c.developpez.com/faq/?page=cl...buffer_clavier

    A+

  8. #7
    Jack
    Modérateur

    Re : permutation de deux variables

    je persiste cependant à dire que la ligne suivante est fausse:

    scanf("%c",*a);

  9. #8
    mril232

    Re : permutation de deux variables

    Le problème est toujours le même >_<.

  10. #9
    Jack
    Modérateur

    Re : permutation de deux variables

    Quel problème? Montre ton nouveau code.

  11. #10
    mril232

    Re : permutation de deux variables

    Code:
    #include<stdio.h>
    #include<stdlib.h>
    void echanger(char*a,char*b)
    {
         char aide;
         aide=*a;
         *a=*b;
         *b=aide;
         
    }
    
          main()
          {
                char *a,*b;
                a=(char*)malloc(sizeof(char));
                b=(char*)malloc(sizeof(char));
                printf("saisir le premier");
                scanf("%c%c",a,b);
               
                 
                echanger(a,b);
                printf("%c%c",*a,*b);
                system("pause");
          }

  12. #11
    Jack
    Modérateur

    Re : permutation de deux variables

    et bien, qu'est-ce qui ne fonctionne pas? Tu entres ab par exemple et ça affiche ba.

    Où est le problème?

  13. #12
    mril232

    Re : permutation de deux variables

    Pour la saisie a et b doit être saisie séparé par un "espace" ou non?

  14. #13
    Jack
    Modérateur

    Re : permutation de deux variables

    Citation Envoyé par mril232 Voir le message
    Pour la saisie a et b doit être saisie séparé par un "espace" ou non?
    Non, scanf("%c" va lire le buffer clavier caractère par caractère. L'espace est un caractère comme un autre.

    A+

  15. #14
    mril232

    Re : permutation de deux variables

    Ah voilaaaaa Merci.

  16. #15
    whoami

    Re : permutation de deux variables

    Bonjour,

    Pourquoi aller faire un malloc pour un seul caractère ?

    Et en plus, en oubliant le free correspondant !

  17. #16
    Aenonis

    Re : permutation de deux variables

    Bonjour,

    Bien que le sujet ait été "résolu", je persiste à dire qu'il y a un soucis avec la mémoire et la compréhension du langage...

    La fonction qui swape est correcte.

    Mais tu peux passer l'adresse d'une variable à une fonction afin qu'elle modifie son contenu.

    Voici un code équivalent mais qui est bien plus joli et compréhensible:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    void echanger(char *a, char *b)
    {
         char aide;
         aide=*a;
         *a=*b;
         *b=aide;
    }
    
    int main(void)
    {
         char a, b;
         printf("saisir les deux caractères:");
         scanf("%c%c", &a, &b);
         echanger(&a, &b);
         printf("%c%c", a, b);
         system("pause");
    }
    Au lieu de jouer avec des pointeurs dans le main, tu joues avec les variables en tant que telles et pour que la fonction échanger fonctionne, tu passes l'adresse des variables (avec le symbole éperluette '&'), de ce fait, l'appel à scanf se voit modifié vu que scanf modifie les variables, il faut aussi passer l'adresse (&a et &b).

    Si tu as des questions, n'hésite pas à relancer le sujet,

    Amicalement,

    Aenonis
    Dernière modification par Aenonis ; 13/01/2013 à 17h59.
    Aenonis

  18. #17
    fred1599

    Re : permutation de deux variables

    Alors peur d'utiliser le "ET commercial &". Ce type de code risque d'apporter plus d'ennuis qu'autre chose.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    void swap(char *a, char *b);
    
    int main(void)
    {
        char c_1, c_2;
    
        puts("Entrer une lettre a et b sans espace");
        scanf("%c%c", &c_1, &c_2);
    
        swap(&c_1, &c_2);
    
        printf("%c%c\n", c_1, c_2);
    
        return 0;
    }
    
    void swap(char *a, char *b)
    {
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    Edit : J'ai pas vu le message de Aenonis, mais je suis en tout d'accord (sauf le system("pause"))
    Dernière modification par fred1599 ; 13/01/2013 à 20h13.

  19. #18
    Aenonis

    Re : permutation de deux variables

    Citation Envoyé par fred1599 Voir le message
    J'ai pas vu le message de Aenonis, mais je suis en tout d'accord (sauf le system("pause"))
    Je ne suis pas particulièrement fan de la fonction system vu qu'elle n'est pas portable mais je n'ai repris que son code en modifiant les pointeurs et en utilisant les références, évidemment, ton code est parfaitement portable.

    Vu qu'il programme avec DEV-C++, le programme se ferme automatiquement à la fin donc s'il n'a pas de system("pause") il verra son programme un dixième de seconde.

    S'il programmait avec Code::Blocks par exemple, le system("pause") ne serait pas obligatoire vu que l'EDI fait une pause à la fin, ce que ne fait pas DEV-C++, je le sais, j'ai programmé en son temps avec cet EDI, Code::Blocks est plus difficile à prendre en main mais beaucoup plus puissant, et il me semble que DEV-C++ n'est plus maintenu à jour, il est laissé à l'abandon, donc je suis passé à autre chose.

    Pire encore, à mes débuts, j'utilisais la fonction "getch()" de <conio.h>, je vais me cacher je crois

    Au plaisir,

    Aenonis
    Dernière modification par Aenonis ; 13/01/2013 à 22h16.
    Aenonis

  20. #19
    fred1599

    Re : permutation de deux variables

    Vu qu'il programme avec DEV-C++, le programme se ferme automatiquement à la fin donc s'il n'a pas de system("pause") il verra son programme un dixième de seconde.
    Oui en effet, on aurait pu placer à la place de system("pause"), le fameux getchar()...

    Je ne code pas sous windows, mais temps en temps on a pas le choix que d'utiliser des fonctions non standards, alors quand on peut faut pas hésiter

    Si tu codes pour toi, alors c'est pas gênant, getch ou system, on s'en fou, mais si tu le partages sur un forum pour test et correction, la portabilité est importante.

    Au plaisir,
    de même.

Discussions similaires

  1. permutation de deux variables (PIC 16F84A)
    Par narakphysics dans le forum Électronique
    Réponses: 19
    Dernier message: 25/11/2011, 17h13
  2. statistiques a deux variables
    Par nasssi dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 18/09/2011, 23h00
  3. Fonctions de deux variables
    Par invited72cba9f dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 05/06/2009, 18h38
  4. fonction à deux variables
    Par J.M.M dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 22/05/2008, 14h06
  5. fonction deux variables
    Par invite5b7209be dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 19/04/2008, 11h12