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 un tableau de structure


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut Problème avec un tableau de structure
    Bonjour,

    Je suis en train de développer un programme en C qui me permet d'enregistrer un fichier dans un tableau de structure. J'obtiens une erreur de compilation qui est:
    erreur incompatible types in return.

    Voici quelques bouts de code.

    Déclaration de ma structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct {
                           char ville[50];
                           int nb;
                        } rmi;
    rmi tab[160];

    Ma fonction de copie:

    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
     
    rmi file_copy(char nomfich[])
    {
    	rmi tab[160];
    	FILE *fiche = NULL;
    	char *p_temp = NULL;
    	char *p_temp_word = NULL;
     
    	char buffer[1024];
    	int i=0, cpt = 0;
     
     
     
    	/* ----- Ouverture du fichier ----- */
     
    	fiche = fopen (nomfich, "r");
     
       	if (!fiche)
    	   {
    	      /* Erreur: impossible d'ouvrir le fichier. */
    	      printf("Erreur: impossible d'ouvrir le fichie");
    	   }
     
    	while (fgets(buffer,BUFSIZ,fiche) )
    		{
    		 char *p = NULL;
    		 p=strstr(buffer, "\n");
    		    if (p != NULL)
    			{
    			 *(p-1) = 0;
    			}
    		    else
    			{
    			 memset (buffer, 0, sizeof (buffer));
    			}
    		 strcpy(tab[i].ville,buffer);
    		 tab[i].nb = 0;
    	         p_temp = NULL;				 
    	      	 i++;cpt++;
    	        }
    fclose(fiche);
    return tab;
     
    }
    Pouvez vous m'aider please?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ta fonction a un type de retour structure, et tu cherches à lui faire retourner un tableau (l'adresse d'un tableau local, qui plus est...)
    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.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Donc il faut que je déclare mon tableau en global comme ce ci?
    Sinon comment je peux retourner mon tableau de type structure rmi?

    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
     
    rmi file_copy(char nomfich[],rmi tab[];)
    {
     
    	FILE *fiche = NULL;
    	char *p_temp = NULL;
    	char *p_temp_word = NULL;
     
    	char buffer[1024];
    	int i=0, cpt = 0;
     
     
     
    	/* ----- Ouverture du fichier ----- */
     
    	fiche = fopen (nomfich, "r");
     
       	if (!fiche)
    	   {
    	      /* Erreur: impossible d'ouvrir le fichier. */
    	      printf("Erreur: impossible d'ouvrir le fichie");
    	   }
     
    	while (fgets(buffer,BUFSIZ,fiche) )
    		{
    		 char *p = NULL;
    		 p=strstr(buffer, "\n");
    		    if (p != NULL)
    			{
    			 *(p-1) = 0;
    			}
    		    else
    			{
    			 memset (buffer, 0, sizeof (buffer));
    			}
    		 strcpy(tab[i].ville,buffer);
    		 tab[i].nb = 0;
    	         p_temp = NULL;				 
    	      	 i++;cpt++;
    	        }
    fclose(fiche);
    return tab;
     
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu connais à l'avance la taille maximale du tableau, du peux passer le tableau en paramètre en effet.
    Dans ce cas, je te conseille de passer aussi sa taille en paramètre, c'est une bonne pratique :
    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
    #define MY_BUFFER_SIZE 1024
     
    /* Une pratique commune en C:
       On retourne 0 si OK, -1 si erreur. */
    int file_copy(char const nomfich[], rmi tab[], size_t taille)
    {
    	FILE *fiche = NULL;
     
    	char buffer[MY_BUFFER_SIZE];
    	size_t i=0;
     
    	/* ----- Ouverture du fichier ----- */
    	fiche = fopen (nomfich, "r");
     
       	if (!fiche)
    	{
    		/* Erreur: impossible d'ouvrir le fichier. */
    		printf("Erreur: impossible d'ouvrir le fichie");
    		return -1;
    	}
     
    	while (fgets(buffer, MY_BUFFER_SIZE, fiche) && i<taille )
    	{
    		/* Cherche le caractère de nouvelle ligne (Line Feed) */
    		char *pLF = NULL;
    		pLF = strchr(buffer, '\n');
    		if (pLF != NULL)
    		{
    			*p = '\0';
    		}
    		else
    		{
    			/* On finit de lire la ligne jusqu'au LF */
    			int c;
    			while((c=fgetc(fiche)) != '\n' && c != EOF)
    			{ }
     
    			/* ??? */
    			memset (buffer, 0, sizeof (buffer));
    		}
    		strcpy(tab[i].ville, buffer);
    		tab[i].nb = 0;
    	      	i++;
    	}
    	fclose(fiche);
    	return 0;
    }
    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.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Je te remercie cela fonctionne à merveille. En tout cas chapeau
    Ça faisait 5 ans que je n'avais plus programmé donc je ne te dis pas comment je suis un peu rouillé

    J'ai du modifié quand même un oubli et une érreur que je ne comprend pas vraiment. (voir le texte en rouge)
    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
    while (fgets(buffer, MY_BUFFER_SIZE, fiche) && i<taille )
    	{
    		/* Cherche le caractère de nouvelle ligne (Line Feed) */
    		char *pLF = NULL;
    		pLF = strchr(buffer, '\n');
    		if (pLF != NULL)
    		{
                        /* Petite erreur mais je ne sais pas pourquoi il faut mettre -1*/
    			*(pLF-1) = '\0';
    		}
    		else
    		{
    			/* On finit de lire la ligne jusqu'au LF */
    			int c;
    			while((c=fgetc(fiche)) != '\n' && c != EOF)
    			{ }
     
    		}
    		strcpy(tab[i].ville, buffer);
    		tab[i].nb = 0;
    	      	i++;
    	}

  6. #6
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Une pratique commune en C:
       On retourne 0 si OK, -1 si erreur. */
    Euh....

    Une pratique commune en C....

    Il arrive de nombreuses fois qu'on fasse comme un booléen, c'est à dire retourner 0 si erreur ou 1 si ok :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( Ouverture_Fichier(....) && Lecture_Fichier(...) )
    {
       /* OK */
    }
    else
     return ERROR ;
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    pek.plus.ultra59 : Es-tu sûr qu'il faut vraiment mettre un -1 ? Je l'ai retiré volontairement, tu sais: Avec le -1, on ne supprime pas seulement le \n, mais aussi le caractère qui le précède!

    souviron34 : En effet, Windows fait ça. Mais généralement dans ce cas-là, on spécifie d'une autre manière que le résultat est booléen (avec un typedef, par exemple).

    Mais j'ai été un peu restrictif, je l'admet: Généralement, quand une fonction standard C ou POSIX retourne un int, c'est plutôt "non-négatif pour succès, négatif pour échec" (et c'est pareil pour les HRESULT, au passage).
    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 à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    pek.plus.ultra59 : Es-tu sûr qu'il faut vraiment mettre un -1 ? Je l'ai retiré volontairement, tu sais: Avec le -1, on ne supprime pas seulement le \n, mais aussi le caractère qui le précède!
    Oui certain j'ai testé sans et il me supprimer les premières lettres des noms de mes villes.

  9. #9
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    euh...............

    Pourquoi faites-vous fgets ET fgetc ?????????

    C'est ça qui marche pas....

    fgets lit toute la ligne jusqu'au \n, \r, etc....

    En plus, vous resettez buffer AVANTde vous en servir... Et comme toutes les lignes lues par fgets contiennent le \n, tu passes jamais dans le else...


    Donc :

    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
     
    	while (fgets(buffer, MY_BUFFER_SIZE, fiche) && i<taille )
    	{
    		/* Cherche le caractère de nouvelle ligne (Line Feed) */
    		char *pLF = NULL;
    		pLF = strchr(buffer, '\n');
    		if (pLF != NULL)
    		{
    		     *pLF = '\0';
    		}
     
    		strcpy(tab[i].ville, buffer);
    		tab[i].nb = 0;
    	      	i++;
    	}
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    • Je ne fais fgetc() que si fgets() n'a pas lu toute la ligne. Tu sais, le principe de fclean(), quoi...
    • Je n'ai aucune idée de pourquoi il resette toute la ligne si elle était plus grande que le buffer. Là, ça me dépasse...
    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.

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    En effet je n'avais pas besoin du reset c'était un bout de code que j'avais oublié d'enlever .

    Ça faisait plus de deux heures que je cherchais, donc je ne vous dit pas toutes les possibilités que j'ai essayer.

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Il reste quand meme une petite erreur.

    Voici un petit exemple:
    fichier à copier:

    Ville1
    Ville2
    Ville3
    Ville4

    Affichage de mon tableau après avoir recopier le fichier en entrée:

    Ville1
    Ville2
    Ville3
    Ville <= il me manque le 4.

    Donc comme vous avez pu le voir, après avoir recopier mon fichier dans un tableau et affichage, on s'aperçoit qu'il me manque le 4 de la dernière ville.

    Avez vous une idée?
    Merci

    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
    while (fgets(buffer, MY_BUFFER_SIZE, fiche) && i<taille )
    	{
    		/* Cherche le caractère de nouvelle ligne (Line Feed) */
    		char *pLF = NULL;
    		pLF = strchr(buffer, '\n');
    		if (pLF != NULL)
    		{
                        /* Petite erreur mais je ne sais pas pourquoi il faut mettre -1*/
    			*(pLF-1) = '\0';
    		}
    		else
    		{
    			/* On finit de lire la ligne jusqu'au LF */
    			int c;
    			while((c=fgetc(fiche)) != '\n' && c != EOF)
    			{ }
     
    		}
    		strcpy(tab[i].ville, buffer);
    		tab[i].nb = 0;
    	      	i++;
    	}

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    c'est bon pour la petite erreur.
    Finalement j'ai remis *pLF = '\0' (pourtant avant cela me décaler la suppression de la ligne, bref ne cherchons pas)

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Voila j'ai presque fini mon programme mais j'ai un petit souci de comparaison.

    Je souhaiterais comparer deux chaines et lorsque qu'elles sont égales j'incrémente un compteur.

    Actuellement j'utilise strstr() mais si jai 2 noms de ville comme aibes et eclaibes, cela m'incrémente le compteur.

    Voici ce que je lis dans la première chaine:
    eclaibes; 20 (lu à partir d'un fichier)

    Et ce que je lis dans à partire de ma deuxième chaine:
    claibes


    Avez vous une idée pour remédier à mon problème?



    Code de ma fonction.

    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
    int maj_tab(rmi tab[],char nomfich [], int cpt)
    {
     FILE *fiche;
     char buffer[MY_BUFFER_SIZE];
     int i = 0;
     
     fiche = fopen(nomfich,"r");
     
     if (!fiche)
       {
          /* Erreur: impossible d'ouvrir le fichier. */
          printf("Erreur: impossible d'ouvrir le fichie");
          return -1;
       }
     
    /* On parcour le fichier */
     while (fgets(buffer,MY_BUFFER_SIZE,fiche))
     {
    	/*On parcour le tableau de structure RMI pour mettre à jours Tab.nb*/
    	for (i; i<cpt; i++)
    	 {
    		char *pLS = NULL; 
    		pLS = strstr (buffer,tab[i].ville);
     
    		/* Si on trouve la ville on recherche le caractère ;*/
    		if(pLS)
    		 {
    		  /*On supprime le retour à la ligne*/
    		  char *pLZ = NULL;
    		  pLZ = strchr(buffer, '\n');
     
    		    if (pLZ != NULL)
    			{
    			 *pLZ = '\0';
    			}
    		    else
    			{
    			 /*On finit de lire la ligne jusqu'au LF*/
    			 int c;
    			 while ((c=fgetc(fiche)) != '\n' && c != EOF)
    			 {}
    			}
     
      		  char *pLF = NULL;
    		  pLF = strchr(buffer, ';');
    		  int *pINT = NULL;
    		  int convert = 0;
     
    		    /*Si on trouve le ; alors on remplie le champ tab.nb*/
    		    if (pLF != NULL)
    			{ 
    			 /*On converti la chaine de chiffre en entier et on l'enregistre dans le tableau*/
    			 convert = atoi((pLF + 1));
    			 tab[i].nb = tab[i].nb + convert;
    			}
    		}
    	 }

  15. #15
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Pourquoi n'utilises-tu pas strcmp() pour la comparaison de chaines?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  16. #16
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    J'aimerais bien mais le problème c'est que la chaine n°1 est de type:
    nom de ville; 20

    et la chaine n°2:
    nom de ville


    Donc les deux chaines ne sont pas identique avec strcmp.

  17. #17
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Tu peux essayer une fonction comme la fonction comparer_villes() ci-dessous:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
     
    int comparer_villes(char const *ville1, char const *ville2)
    {
        int ret = 0;
     
        if (ville1 != NULL && ville2 != NULL)
        {
            size_t i = 0;
     
            while (ville1[i] == ville2[i] && isalpha(ville1[i]) && isalpha(ville2[i]))
            {
                i++;
            }
     
            if (isalpha(ville1[i]) == 0 && isalpha(ville2[i]) == 0)
            {
                ret = 1;
            }
        }
     
        return ret;
    }
     
    /* -tc- Tests */
     
    #define ARRAY_SIZE(a) ( sizeof (a) / sizeof *(a) )
     
    struct Test
        {
            char v1[32];
            char v2[32];
            int resultat;
        };
     
    int main(void)
    {
        struct Test data[]=
        {
            {"Fribourg", "Fribourg; 20", 1},
            {"Fribourg; 20", "Fribourg", 1},
            {"Fribourgx", "Fribourg; 20", 0},
            {"Fribourg", "Fribourgx; 20", 0},
            {"Fribourgx", "Fribourgx; 20", 1},
            {"Fribourg", "Fribourg", 1},
            {"Fribourg  ", "Fribourg", 1},
        };
        size_t i;
        int ret = EXIT_SUCCESS;
     
        for (i = 0; i < ARRAY_SIZE(data); i++)
        {
            int rv;
     
            printf("Test%u: comparaison de \"%s\" et de \"%s\"...   ", i+1, data[i].v1, data[i].v2);
            rv = comparer_villes(data[i].v1, data[i].v2);
            if (rv == data[i].resultat)
            {
                printf("REUSSI\n");
            }
            else
            {
                printf("ECHOUE!\n");
                ret = EXIT_FAILURE;
            }
        }
     
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  18. #18
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    je te remercie, je vais essayer d'adapter ton programme au mien.
    Je te tien au courant

  19. #19
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Parcontre je me pose une question.

    Est ce que ton programme fonctionne avec des noms de ville composés?


  20. #20
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    J'ai testé et ca fonctionne avec les noms composé.

    Il me reste plus qu'a l'introduire dans mon code. merci

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

Discussions similaires

  1. Problème avec un tableau de structure
    Par Sofute dans le forum C
    Réponses: 10
    Dernier message: 16/10/2007, 15h29
  2. Problème avec redimensionnement tableau
    Par PoZZyX dans le forum Réseau
    Réponses: 18
    Dernier message: 20/04/2006, 15h46
  3. Problème avec un tableau et saut de ligne
    Par ero-sennin dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 08/03/2006, 18h48
  4. Problème avec un tableau de tableau
    Par SubZero2 dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2005, 15h25
  5. problème avec un tableau dans un insert ...
    Par vbcasimir dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 14h31

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