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 :

les listes chaînées


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut les listes chaînées
    BOnsoir,
    voila j'ai un exercice relativement simple mais je ne comprend pas mon erreur, voici l'énoncé:
    Ecrire une fonction aLaFin(s,c), qui retounre 1 si la chaîne s finit par le caractére c et 0 sinon.
    En compilant je me retrouve avec 0 erreur mais en résultat j'ai un core dumped !
    je ne vois pas mon erreur enfin je me demande si l'érreur vien pas du buffer clavier avec scanf....
    serai-ce possible de m'indiquer mon erreur?
    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<ctype.h>
    #include<string.h>
     
     
    int aLaFin(char *s,char c){
      int i;
      i=0;
      while (s[i]!='\0'){
        i++;
      }
      if (s[i-1]==c) return 1;
      else return 0;
    }
     
     
     
    /*void affiche(char *verbe){
      int i;
      for(i=0;i<strlen(verbe);i++) printf("%c",*(verbe+i));
      }*/
     
     
    int main(){
      char s[10];
      char c;
      int i;
      printf("donnez un mot:");
      scanf("%s",s);
      printf("donnez une lettre:");
      while ((i=getchar())!='\n'&& i!=EOF)
      scanf("%c",&c);
      while ((i=getchar())!='\n'&& i!=EOF)
      printf("resultat de aLaFin:%d",aLaFin(s,c));
      return 0;
    }
    j'ai trouver mon erreur désolé pour le poste inutile :/

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonsoir,

    ce n'est pas de ce bout de code que provient l'erreur. Comment l'utiliser vous?

    D'ailleurs, en remaniant un peu votre code, on obtient :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
     
    int aLaFin(char *s,char c){
            int i= 0;
            while (s[i]!='\0'){
                    i++;
            }
            return s[i-1] == c;
     
    }

    En effet, pour la clarté du code, il est préférable de ne mettre qu'un seul return par fonction

    @+
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Ha ben tout compte fait j'ai belle est bien un problème :/
    exemple: Bonjour pour la chaîne de caractére et r pour le caractére
    j'ai utiliser un printf pour voir la valeur de i-1 je trouve 6 donc parfait
    je teste l'égalité mais il me retourne 0 au lieu de 1 je ne comprend pas (j'ai essayé aussi avec votre méthode, même erreur il renvoie toujours 0)

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Voici le script que j'ai exécuté :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
     
    int aLaFin(char *s,char c){
    	int i= 0;
    	while (s[++i]!='\0');
     
    	return s[i-1]==c;
    }
     
    int main(void) {
    	char *s= malloc(2*sizeof(char*));
    	strcpy(s, "bi");
    	printf("%d\n",aLaFin(s, 'i'));
    	return 0;
    }

    Il fonctionne parfaitement, donc l'erreur ne vient pas de votre fonction aLaFin, du moins je ne le penses pas.

    Mettez le code que vous exécutez afin d'y voir plus clair

    @+
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    On peut simplifier la fonction comme ceci

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int aLaFin(char *s,char c){
    	int lg= strlen(s);	
    	return s[lg-1]==c;
    }


  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    c'est bon j'ai réusit a le faire aller, le soucis était le buffer clavier, la fonction scanf est vraiment mal faite :/
    (le fonction strlen je l'utilise pas car d'après l'exercice on ne doit pas utiliser les bibliotéques hormis stdio.g et stdlib.h)

Discussions similaires

  1. Les listes chaînées
    Par AureK dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 05/09/2007, 17h52
  2. Les listes chaînées
    Par dyala dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2007, 10h09
  3. petit problème sur les listes chaînées
    Par poche dans le forum C
    Réponses: 14
    Dernier message: 19/03/2007, 16h53
  4. [TP 7] Problème avec les listes chaînées (error 202)
    Par thelinekioubeur dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/12/2006, 23h15
  5. Réponses: 7
    Dernier message: 22/10/2005, 19h20

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