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 :

Mon programme se termine prématurément


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut Mon programme se termine prématurément
    Bonjour,

    Ce programme ne s'exécute 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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    /*Nom:exercice 1 du devoir 8
    version 1.0
    auteur:
    date de création : 12/7/2009
    date de dernière mise à jour :
    Description du travail :
    -saisir un par un les mots constituants le dictionnaire
    -recherche dichotomique d'un mot dans le dictionnaire
    -affichage du résultat de la recherche*/
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    #define MAXMOTS 100
    #define LONGMOT 20
     
    short dichotomie(char **dico,char *mot,short nb_mots);
     
    main()
    {
    	/*déclaration et initialisation des variables*/
    	short nb_mots=0;
    	char *mot;
    	char **dico;
    	int termine,cptr;
    	short moTrouve;
    	termine=0;
    	mot=malloc(LONGMOT*sizeof(*mot));
    	dico=malloc(MAXMOTS*sizeof(char *));
     
    	/*saisie des mots du dictionnaire*/
    	while((termine!=1)&&(nb_mots<MAXMOTS))
    	{
    		printf("entrer un mot (fin pour terminer) : ");
    		scanf("%s",mot);
     
    		if(strcmp(mot, "fin")==0)
    		{
    			termine=1;
    		}
    		else
    		{
    			*(dico+nb_mots)=malloc(strlen(mot)+1);
    			strcpy(*(dico+nb_mots),mot);
    			nb_mots++;
    		}
    	}
     
    	moTrouve=dichotomie(dico,mot,nb_mots);
    	if(moTrouve==1)
    	{
    		printf("le mot %s a ete trouve .\n",mot);
    	}
    	else
    	{
    		printf("le mot %s est introuvable .\n",mot);
    	}
     
    	/*libération espâce mémoire*/
    	free(mot);
    	free(dico);
    }
     
    short dichotomie(char **dico,char *mot,short nb_mots)
    {
    	/*initialisation des variables*/
    	int i,j,k,trouve,inter;
    	i=0;
    	j=nb_mots;
    	k=(nb_mots,2);
     
    	/*saisie du mot à trouver*/
    	printf("entrer le mot a trouver : ");
    	scanf("%s",mot);
     
    	/*recherche du mot saisi dans le dico*/
    	do
    	{
    		inter=j-i;
    		k=(j+i)/2;
    		trouve=strcmp(*(dico+k),mot);
    		if(trouve>0)j=k;
    		if(trouve<0)i=k;
    		if(trouve==0)inter=1;
    	}while(inter>1);
     
    	/*renvoi résultat recherche*/
    	if(trouve==0)
    	{
    		system("pause");
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    }

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Que veux tu dire par ne s'execute pas ?

  3. #3
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut
    ça devrait me demander une liste de mot à écrire dans un dico et ensuite retrouvé un mot dans ce dico.
    à l'exécution ça ne me donne rien .ça me marque juste taper un mot à trouver, je le tape et ça me marque 'appuyer sur une touche pour continuer' ce qui met fin au programme

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    J'ai copier coller le code.

    dans un premier temps, je rentre effectivement tout les mots que je veux, puis je rentre fin afin de terminer.
    Puis je rentre un mot et le programme me dit si oui ou non il est present dans la liste de mot que je viens de rentrer.

    Ton programme doit-il faire cela ?
    Plante t'il toujours ?

  5. #5
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void)
    {
      /* ... */
      return EXIT_SUCCESS;
    }
    -------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            *(dico+nb_mots)=malloc(strlen(mot)+1);
    	strcpy(*(dico+nb_mots),mot);
    Tu peux utiliser les crochet c'est plus facile à lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           	dico[nb_mots]=malloc(strlen(mot)+1);
           	strcpy(dico[nb_mots], mot);
    -------------------

    Tu ne libere pas la mémoire allouée dans la boucle while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            *(dico+nb_mots)=malloc(strlen(mot)+1);
    -------------------

    Tu peux legerment simplifier la boucle while avec un break :
    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
    	while(nb_mots<MAXMOTS)
    	{
    		printf("entrer un mot (fin pour terminer) : ");
    		scanf("%s",mot);
     
    		if(strcmp(mot, "fin")==0)
    		{
    			break;
    		}
    		else
    		{
    			dico[nb_mots]=malloc(strlen(mot)+1);
    			strcpy(dico[nb_mots], mot);
    			nb_mots++;
    		}
    	}
    ça evite l'utilisation de la variable termine.

    -------------------

    Les saisies ne sont pas sécurisées.

    ...

  6. #6
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut
    J'ai effectué ces changements mais ça ne fonctionne toujours pas .
    Si je mets le mot 'je' dans la liste de dico quand je tape la recherche ça ne me donne aucun résultat

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    /*Nom:exercice 1 du devoir 8
    version 1.0
    auteur:
    date de création : 12/7/2009
    date de dernière mise à jour :
    Description du travail :
    -saisir un par un les mots constituants le dictionnaire
    -recherche dichotomique d'un mot dans le dictionnaire
    -affichage du résultat de la recherche*/
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    #define MAXMOTS 100
    #define LONGMOT 20
     
    short dichotomie(char **dico,char *mot,short nb_mots);
     
    main()
    {
    	/*déclaration et initialisation des variables*/
    	short nb_mots=0;
    	char *mot;
    	char **dico;
    	int termine,cptr;
    	short moTrouve;
    	termine=0;
    	mot=malloc(LONGMOT*sizeof(*mot));
    	dico=malloc(MAXMOTS*sizeof(char *));
     
    	/*saisie des mots du dictionnaire*/
    	while((termine!=1)&&(nb_mots<MAXMOTS))
    	{
    		printf("entrer un mot (fin pour terminer) : ");
    		scanf("%s",mot);
     
    		if(strcmp(mot, "fin")==0)
    		{
    			termine=1;
    		}
    		else
    		{
    			*(dico+nb_mots)=malloc(strlen(mot)+1);
    			strcpy(*(dico+nb_mots),mot);
    			nb_mots++;
    		}
    	}
     
    	moTrouve=dichotomie(dico,mot,nb_mots);
    	if(moTrouve==1)
    	{
    		printf("le mot %s a ete trouve .\n",mot);
    	}
    	else
    	{
    		printf("le mot %s est introuvable .\n",mot);
    	}
     
    	/*libération espâce mémoire*/
    	free(mot);
    	free(dico);
    	free(*(dico+nb_mots));
    }
     
    short dichotomie(char **dico,char *mot,short nb_mots)
    {
    	/*initialisation des variables*/
    	int i,j,k,trouve,inter;
    	i=0;
    	j=nb_mots;
    	k=(nb_mots,2);
     
    	/*saisie du mot à trouver*/
    	printf("entrer le mot a trouver : ");
    	scanf("%s",mot);
     
    	/*recherche du mot saisi dans le dico*/
    	do
    	{
    		inter=j-i;
    		k=(j+i)/2;
    		trouve=strcmp(*(dico+k),mot);
    		if(trouve>0)j=k;
    		if(trouve<0)i=k;
    		if(trouve==0)inter=1;
    	}while(inter>1);
     
    	/*renvoi résultat recherche*/
    	if(trouve==0)
    	{
    		system("pause");
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    	return EXIT_SUCCESS;
    }

Discussions similaires

  1. Mon programme java utilisant itext ne se termine jamais !
    Par Battosaiii dans le forum Langage
    Réponses: 8
    Dernier message: 14/11/2012, 17h40
  2. Veuillez m'aider pour terminer mon programme
    Par tarek_ep dans le forum Firebird
    Réponses: 4
    Dernier message: 18/07/2008, 07h44
  3. [débutant]Mon programme ne termine pas
    Par ThreeQuarks dans le forum Caml
    Réponses: 13
    Dernier message: 24/08/2007, 15h13
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. Réponses: 11
    Dernier message: 17/03/2003, 10h56

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