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 :

pointeur avec fonctions


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 63
    Par défaut pointeur avec fonctions
    salut voila j ai creer un programme qui grace a l aide d une fonctions doit lorsque l on rentre une chaine de caractere doit nous retourner la meme chaine de caractere mais avec une lettre qui a ete specifier en entrer.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    azerty
    lettre a modifier: z
    resultats: aZerty
    voila mon programme:
    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
     
    #include<stdio.h>
    #include<stdlib.h>
     
    char* Majuscule(char*Pt_Chaine,char Lettre)
    {
            char*Pt_debut=Pt_Chaine;
     
             while(*Pt_Chaine='\0');
    		{
                     if(*Pt_Chaine==Lettre)
                          {
                                   *Pt_Chaine=*Pt_Chaine-32;
                                     Pt_Chaine++;
     
                          }
                      }
                   return Pt_debut;
    }
    int main (void)
    {
            char *pt;
            char Lettre;
     
             pt=(char *)malloc(100);
     
             gets(pt);
     
              printf("Quel est la lettre a modifier ?:\n");
              scanf("%c",&Lettre);
     
    Majuscule(pt,Lettre);
     
             printf("%s",*pt);
             getch();
    }
    or lorsque je lance le programme le resultats est: <NULL>

    pouver vous m aider.
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Bonjour,

    N oublie pas les balise [ CODE] ... [ /CODE] quand tu met du code .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(*Pt_Chaine='\0');
    Je ne pense pas que ce soit cela que tu veut car tu affecte '\0' à *Pt_Chaine
    il faudrait plutot mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(*Pt_Chaine!='\0')

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Une petite chose :

    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
    #include<stdio.h>
    #include<stdlib.h>
     
    char* Majuscule(char*Pt_Chaine,char Lettre)
    {
    char*Pt_debut=Pt_Chaine;
     
    while(*Pt_Chaine='\0');
    {
    if(*Pt_Chaine==Lettre)
    {
    *Pt_Chaine=*Pt_Chaine-32;
    Pt_Chaine++;
     
    }
    }
    return Pt_debut;
    }
    Pourquoi retourne tu Pt_debut ? Pourquoi meme declares-tu Pt_debut ?
    Ce n est pas la peine. Je m explique :
    Pt_Chaine est un pointeur de caractere. Il est donc passe par reference en parametre de ma fonction, ce qui signifie que a la fin de la fonction les valeurs changees sur le ponteur Pt_Chaine resteront changees meme apres la fonction Majuscule.

    Petit exemple :
    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
    #include <stdlib.h>
    #include <stdio.h>
     
     
     
    void incr(char *s) {
            int i;
            for (i = 0; i < 2; i++) {
                    s[i] = 'l';
                    s++;
            }
    }
     
    int main() {
            char s[] = "123456789";
            incr(s);
            printf("s = %s\n", s);
     
            return 1;
    }
    resultat :
    Ceci montre bien qu a la fin de la fonction, le pointeur pointe toujours sur la meme adresse, mais que les valeurs ont change.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par freeman43
    salut voila j ai creer un programme qui grace a l aide d une fonctions doit lorsque l on rentre une chaine de caractere doit nous retourner la meme chaine de caractere mais avec une lettre qui a ete specifier en entrer.
    Beaucoup d'erreurs dans ton code. Pose des questions si nécessaire :
    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
     
    #include<stdio.h>
    #include<stdlib.h>
     
    char *Majuscule (char *Pt_Chaine, int Lettre)
    {
       char *Pt_debut = Pt_Chaine;
     
       while (*Pt_Chaine != '\0')
       {
          if (*Pt_Chaine == Lettre)
          {
             *Pt_Chaine = *Pt_Chaine - 32;
          }
          Pt_Chaine++;
       }
       return Pt_debut;
    }
    int main (void)
    {
       char s[100 + 1];
       int c;
     
       printf ("Texte original\n");
       fgets (s, sizeof s, stdin);
     
       printf ("Quel est la lettre a modifier :\n");
       c = getchar ();
       if (c != '\n')
       {
          getchar ();
       }
     
       Majuscule (s, c);
     
       printf ("%s\n", s);
     
       return 0;
    }
    EDIT : Et ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       *Pt_Chaine = *Pt_Chaine - 32;
    c'est horrible et pas portable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       *Pt_Chaine = tolower (*Pt_Chaine);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Toujours ce retour de fonction qui n a pas lieu d etre Grrrrrr

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par berg
    Toujours ce retour de fonction qui n a pas lieu d etre Grrrrrr
    Il permet ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       printf ("%s\n", Majuscule (s, c));
    C'est une pratique courante offerte par de nombreuses fonctions de la bibliothèque standard.

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 63
    Par défaut
    alors pour la fonction je suis d accord avec toi car sinon je ne peux pas sortie de la boucle.

    mais pour ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int main (void)
    {
       char s[100 + 1];
       int c;
    je suis obliger d utiliser un pointeur a la place du s et lui definir un espace d allocation avec la fonction malloc et pourqoi pour definir un caractere tu met un int et non un char.

    ensuite je ne comprend pas ces 2 ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      printf ("Texte original\n");
       fgets (s, sizeof s, stdin);
    car avec un gets() cela fait pareil.

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par freeman43
    [...] pourqoi pour definir un caractere tu met un int et non un char.
    Un char est convertible en int tout simplement... du moins pour expliquer simplement.

    Citation Envoyé par freeman43
    ensuite je ne comprend pas ces 2 ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      printf ("Texte original\n");
       fgets (s, sizeof s, stdin);
    car avec un gets() cela fait pareil.
    La première ligne t'affiche le texte passé en argument et la seconde remplir le buffer s avec la saisie utilisateur récupérée sur stdin (entrée standard - clavier). gets n'est pas à utiliser et devrait même être bannie du langage car elle n'effectue aucun contrôle de débordement de buffer !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 63
    Par défaut
    Merci les gars je vien de trouver pourqoi ce ne m affiche pas de resultats.
    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
     
    #include<stdio.h>
    #include<stdlib.h>
     
    char* Majuscule(char*Pt_Chaine,char Lettre)
    {
     
    	char*Pt_debut=Pt_Chaine;
     
    	while(*Pt_Chaine!='\0')
    		{
    			if(*Pt_Chaine==Lettre)
    			{
    				*Pt_Chaine=*Pt_Chaine-32;
     
    			}
    				Pt_Chaine++;
          }
    	return Pt_debut;
    }
    int main (void)
    {
    	char *pt;
    	char Lettre;
     
    	pt=(char *)malloc(100);
     
    	gets(pt);
     
    	printf("Quel est la lettre a modifier ?:\n");
    	scanf("%c",&Lettre);
     
    Majuscule(pt,Lettre);
     
    	printf("%s",&*pt);
    	getch();
    }
    en faite il fallait que dans mon printf final je mette un &.
    en tout cas merci pour votre aide.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par freeman43
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int main (void)
    {
       char s[100 + 1];
       int c;
    <...>pourqoi pour definir un caractere tu met un int et non un char.
    Parce qu'en C , le type 'naturel' est int (celui qui génère le moins de 'code parasite'), et que le type d'un caractère est int. C'est aussi le type retourné par getchar() et fgetc()...
    ensuite je ne comprend pas ces 2 ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      printf ("Texte original\n");
       fgets (s, sizeof s, stdin);
    car avec un gets() cela fait pareil.
    gets() est une fonction interdite dans les nouveaux développements (pas de limite de saisie). C'est un bug bien connu de la bibliothèque du C.

    L'usage de fgets() est ici simplifié. En réalité, il faut ensuite tester la présence du '\n', et agir en conséquence (le supprimer si il existe, purger le flux dans le cas contraire).

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/01/2008, 11h47
  2. Comment fait ça avec les pointeurs, la fonction et les struc
    Par mahdianis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 18h01
  3. Pointeur sur fonction membre avec parametre
    Par Glosialabolas dans le forum C++
    Réponses: 7
    Dernier message: 06/02/2006, 02h32
  4. Réponses: 17
    Dernier message: 24/03/2005, 12h24
  5. Réponses: 5
    Dernier message: 12/01/2005, 20h58

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