Petit problème en C (pointeurs et fonctions)
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Petit problème en C (pointeurs et fonctions)



  1. #1
    invitee724cc92

    Petit problème en C (pointeurs et fonctions)


    ------

    Bonjour à tous, alors voilà comme dit dans le titre, j'ai un petit problème concernant un code. Le programme permet l'entrée de noms, s'arrête lorsque le même nom est entré deux fois et affiche la liste entrée. Les majuscules sont converties en minuscules et vice versa.
    J'ai tenté de résoudre cet exercice en utilisant des pointeurs mais le programme plante. Je pense que mon erreur se situe au niveau de la fonction "conversion" mais je ne la trouve pas.

    Voici le code:

    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int lecture();
    void affichage(int *i, char tab[30][41]);
    void conversion(int *j,char tab[]);
    
    int main()
    {
        int x,i;
        char tab[30][41];
        x=lecture(tab); // Attribuer à lecture le nombre de noms introduits
        affichage(&x,tab);
        system("pause");
         // Parcourir l'ensemble du tableau
        conversion(&x,tab[i]); // Convertir en min ou maj
        affichage(&x,tab);
        system("pause");
    }
    
    int lecture(char tab[30][41])
    {
         int i; //Nombre de noms introduits
         char nom[41];
         i=0; 
    
         printf("Entrer un nom  ");
         gets(tab[0]);
         printf("Entrer un nom   ");
         gets(nom);
         
    
         while(strcmp(nom,tab[i])!=0)
         {
                       strcpy(tab[i+1],nom);
                       i++;
                       printf("Entrer un autre nom   ");
                       gets(nom);
                               
         }
        return i; //Retourner le nombre de noms introduits
    }
         
    void affichage(int *i, char tab[30][41])
    {
         int j;
         
         for (j=0;j<=*i;j++)
         {
             printf("%s\n",tab[j]);
         }
    }
    
    void conversion(int *j, char tab[])
    {
         int i,k;
         
         for(k=0;k<=*j;k++)
         {
                          
         for(i=0; tab[i] != '\0' ;i++)
         {
                          if((tab[i]>='A') && (tab[i]<='Z'))
                          {
                                        tab[i]=tab[i]+('a'-'A');
                          }
                          else
                          {
                                           tab[i]=tab[i]+('A'-'a');
                          }
         }
         }
    }
    Merci d'avance!

    -----

  2. #2
    Jack
    Modérateur

    Re : Petit problème en C (pointeurs et fonctions)

    Bonsoir.

    Il faudrait déjà que ton programme puisse être compilé avant de dire que ton programme plante.
    A mon avis il y a un problème entre la déclaration et la définition de la fonction lecture(): regarde les arguments.

    De plus, on ne passe pas un tableau par valeur dans une fonction. Ca fait une copie locale qui peut être consommatrice de temps et de ressources et toutes les modifs que tu auras faites dans le tableau eront perdues au retour de la fonction.
    Passe donc plutôt un pointeur sur le tableau.

    Code:
        conversion(&x,tab[i]); // Convertir en min ou maj
    la variable i n'est pas initialisée !!!

    pourquoi tu n'utilises pas une fonction appropriée pour la conversion? toupper() ou tolower() ne te conviennent pas?

    Et finalement, la logique de fin de saisie est un peu bizarre. Au lieu de taper 2 fois le même nom, termine en entrant une chaine vide, ce sera plus simple. Ou alors je n'ai pas trop compris le rôle de la fonction conversion().

    A+
    Dernière modification par Jack ; 08/02/2011 à 23h54.

  3. #3
    polo974

    Re : Petit problème en C (pointeurs et fonctions)

    Au lieu de faire un test puis:
    tab[i]=tab[i]+('a'-'A');
    sinon
    tab[i]=tab[i]+('A'-'a');

    tu pouvais faire systématiquement:
    tab[i]^=('A'^'a');

    mais si tu entres par malheur un nom du genre: d'Artagnan, tu (aur)as un petit problème... (avec l'apostrophe) donc il faut tester mais autrement...

    si tu mets des prototypes en début, fais en sorte qu'ensuite les fonctions les respecte (
    int lecture(); )

    A quoi sert i dans le main?

    Puisque affichage() et conversion() ont besoin des mêmes infos en paramètre, pourquoi ne pas faire pareil pour les 2...

    à Jack: comme il s'agit d'inverser la casse, il n'est pas possible d'utiliser toupper() puis tolower(), tout sortirait dans une seule casse (la dernière demandée).
    Jusqu'ici tout va bien...

  4. #4
    Jack
    Modérateur

    Re : Petit problème en C (pointeurs et fonctions)

    à Jack: comme il s'agit d'inverser la casse, il n'est pas possible d'utiliser toupper() puis tolower(), tout sortirait dans une seule casse (la dernière demandée).
    Ca semble tellement saugrenu que j'avais des doutes sur la finalité.

    A+

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Problème exercice C (pointeurs)
    Par invite0dcfc647 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 23/09/2010, 11h20
  2. Petit problème sur les fonctions (lvl 3iem)
    Par invite3f470ffc dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 22/03/2009, 19h31
  3. petit problème sur les fonctions.
    Par invite260de47c dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 17/02/2009, 16h00
  4. petit problème avec un exercice sur une étude de fonctions
    Par invite8fa6d0ae dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 31/12/2006, 16h55
  5. nouveau petit problème sur les fonctions
    Par invite03201ae3 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 09/02/2005, 15h19