problème d' exécution cpp
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

problème d' exécution cpp



  1. #1
    invitef316ad1f

    Unhappy problème d' exécution cpp


    ------

    salut tout le monde *-*

    mon programme et simple un liste chainée ( créer ,affiche) si j’entre la colleur (type char comme(llm) ) afficher erreur pourquoi?
    solution svp... je suis débutant
    Code:
            #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct element
    {
         int num;
         struct element* suivant;
         char color[10];
    }Element;
    
    
    void saisie(Element *premier)
    {
         Element* p = (Element*)malloc(sizeof(Element));
         p->suivant=NULL;
         printf("chemin1 *-*\n");
         printf("entrez la matricule de voiture \n");
         scanf("%d",&p->num) ;
          printf("entrez la couleur de voiture \n");
            scanf("%d",&p->color) ;
         premier->suivant=p;
    }
    void erreur(char * s)
    {
      fprintf(stderr, "ERREUR FATALE: %s\n", s) ;
      exit (-1) ;
    }
    
    
    Element* insertHead(Element* l,int val)
    {
         Element* p=(Element*)malloc(sizeof(Element));;
         p->num=val;
         p->suivant=l;
         return p;
    }
    
    
    
    void main()
    {
         int x,i;
         int TMax=40;
        Element* p=(Element*)malloc(sizeof(Element));
        Element* first=p;
    
    do
    {
         saisie(p);
         printf("voulez-vous continuer ? si oui taper 1 sinon taper 0\n");
         scanf("%d",&x);
         p=p->suivant;
    }
    while(x==1);
    p=insertHead(first,1) ;
    
          for (i=0 ;i<TMax-1;  i++)
              {     i=i+1;;
              printf("voiture%d\n",i);
              printf("voiture%d\n",p->num);     p=p->suivant;
                 printf("voiture%d\n",p->color);
    
         p=p->suivant;
    
    }
    
    getchar();
    }

    merciii

    -----

  2. #2
    polo974

    Re : problème d' exécution cpp

    p=p->suivant;
    et il est où le suivant ? ? ?

    un pointeur, c'est pas sûr qu'il pointe sur quelque chose de valide...
    Jusqu'ici tout va bien...

  3. #3
    mp3dux

    Re : problème d' exécution cpp

    bonjour,

    1-) essaie de commenter ton code, tu y verrais déjà mieux.

    2-) je ne vois rien qui ressemble à du "C++" dans ton code, on appelle ça du "C"

    3-)Dans la définition de ta fonction saisie(...) ,
    scanf("%d",&p->color) ;
    p->color c'est pas censé contenir des chars ? Pourquoi tu mets %d ?
    Si nous faisions tout ce que nous sommes capables de faire, nous en serions abasourdis. T.E

  4. #4
    invitef316ad1f

    Red face Re : problème d' exécution cpp

    merci je connais mes erreurs

  5. A voir en vidéo sur Futura
  6. #5
    mp3dux

    Re : problème d' exécution cpp

    Citation Envoyé par younsi-imene Voir le message
    merci je connais mes erreurs
    Pourrais tu préciser...
    Si nous faisions tout ce que nous sommes capables de faire, nous en serions abasourdis. T.E

  7. #6
    invitef316ad1f

    Re : problème d' exécution cpp

    Citation Envoyé par mp3dux Voir le message
    Pourrais tu préciser...
    j fait ca ms il existe des erreur

    J'ai suivi votre avis

    ..... mais il y a encore des erreur

    j'ai remplacer %d par %c

    et j'ai supprimer

    Code:
    p=p->suivant;


    Code:
    	#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct element
    {
    	 int num;
    	 struct element* suivant;
    	 char color[10];
    }Element;
    
    
    void saisie(Element *premier)
    {
    	 Element* p = (Element*)malloc(sizeof(Element));
    	 p->suivant=NULL;
    	 printf("chemin1 *-*\n");
    	 printf("entrez la matricule de voiture \n");
    	 scanf("%d",&p->num) ;
    	  printf("entrez la couleur de voiture \n");
    		scanf("%c",&p->color) ;
    	 premier->suivant=p;
    }
    
    
    
    Element* insertHead(Element* l,int val)
    {
    	 Element* p=(Element*)malloc(sizeof(Element));;
    	 p->num=val;
    	 p->suivant=l;
    	 return p;
    }
    
    
    
    int main(void)
    {
    	 int x,i;
    	 int TMax=40;
    	Element* p=(Element*)malloc(sizeof(Element));
    	Element* first=p;
    
    do
    {
    	 saisie(p);
    	 printf("voulez-vous continuer ? si oui taper 1 sinon taper 0\n");
    	 scanf("%d",&x);
    	 p=p->suivant;
    }
    while(x==1);
    p=insertHead(first,1) ;
    
    	  for (i=0 ;i<TMax-1;  i++)
    		  {	 i=i+1;;
    		  printf("voiture%d\n",i);
    		  printf("voiture%d\n",p->num);
    			 printf("voiture%c\n",p->color);
    
    		 p=p->suivant;
    
    }
    
    getchar(); return 0;
    }

  8. #7
    Jack
    Modérateur

    Re : problème d' exécution cpp

    A mon avis, il va falloir nettoyer le buffer clavier avant les scanf de la fonction saisie.

    Ca n'est pas standard, mais sous windows, un "fflush(stdin);" avant le scanf devrait résoudre ce problème.

    Sous unix et ses cousins, voir les méthodes de nettoyage du buffer clavier, par exemple:
    http://c.developpez.com/faq/?page=cl...buffer_clavier

  9. #8
    mp3dux

    Re : problème d' exécution cpp

    En fait le plus gros problème c'est que notre ami veut juste un code qui fonctionne et ne cherche pas à comprendre

    C'est pour ton bien, tu dis que tu débutes alors tu as tout intérêt à comprendre chaque instruction et chaque fonction de ton code. On est là pour t'aider.

    1-Les compilateurs de ces langages sont maintenant si évolués que ça devient très facile de corriger les erreurs. Donc des fois tu n'as plus d'erreurs mais le programme ne fait pas ce que tu veux...
    Il est donc primordiale que tu saches au moins à peu près ce que fait chaque portion de codes se terminant avec un point virgule ";"

    2-Déjà petite correction, il faut que tu revoies la syntaxe de tes scanf et printf pour les chaines de caractère c'est %s pour spécifier le format.
    Code:
    printf("entrez la couleur de voiture \n");
    		scanf("%c",&p->color) ;
    De plus pour le scanf il faut toujours lui passer l'adresse de la variable où tu veux stocker ce que tu rentres, donc l'adresse de ton tableau color[10].
    pour x par exemple il suffisait de faire scanf("%d",&x); Et x est l'entier dans lequel tu veux sauvegarder la valeur, son adresse s'obtient avec &x.
    Là pour le tableau comment fais tu ? Sachant que l'adresse d'un tableau c'est déjà son nom sans les crochets...[plus précisément c'est l'adresse du premier élément du tableau]
    Tu n'as plus besoin de lui mettre le &

    3- Pour un débutant tu utilises pas mal de pointeurs en plus de tes variables "p" que tu déclares partout, ça va pas t'aider à y voir clair, ça entraîne le flou dans ton code.

    4-Tu devrais commenter chaque ligne, ça te permettra de comprendre le code, ta variable TMax elle sert à quoi concrètement , tes fonctions saisie, insertHead etc. Commente les !
    par exemple tu écris ta fonction
    Code:
    insertHead(Element* l,int val) et dedans p->num=val;
    puis tu utilises
    Code:
    p=insertHead(first,1) ;
    le 1 il va aller dans p->num, c'est le numéro matricule 1 ?
    bref commente ton code tu y verras plus clair.


    Compile ce code et dis déjà si c'est ça que tu veux faire avec ton programme, ça permettrait de savoir exactement où on va. Mais ton code on va le corriger, celui là il te servira pas, c'est juste pour le résultat.

    Code:
    #include <iostream>
    #include<string>
    #include <vector>
    
    using namespace std;
    
     long ID = 0;
    
    struct Element{
    
    	long id;
    	string numMat;	
    	string color;
    };
    
    Element saisie()
    {
    	Element p;	
    	cout<<"chemin1 *-*\n";
    	cout<<"entrez la matricule de voiture \n";
    	getline(cin, p.numMat);
    	cout<<"entrez la couleur de voiture \n";
    	getline(cin, p.color);
    	p.id=ID;
    	return p;
    }
    
    int main()
    {
    
    
    	vector<Element> Enregistrement (0);
    	string sx;
    	
    	do
    	{
    		ID++;
    		Enregistrement.push_back(saisie());
    		cout<<"voulez-vous continuer ? si oui taper 1 sinon taper 0\n";
    		 getline(cin, sx);
    		
    	} while (sx == "1");
    
    
    	for (vector<Element>::iterator iter = Enregistrement.begin(); iter != Enregistrement.end(); ++iter) {
    		cout << "\nVoiture "<< (*iter).id << endl;
    		cout << "Immatrculation => " << (*iter).numMat << endl;
    		cout << "Couleur => " << (*iter).color << endl;
    	}
    
    	getchar();
    
    
    	return 0;
    }
    Si nous faisions tout ce que nous sommes capables de faire, nous en serions abasourdis. T.E

  10. #9
    invitef316ad1f

    Re : problème d' exécution cpp

    Citation Envoyé par mp3dux Voir le message
    En fait le plus gros problème c'est que notre ami veut juste un code qui fonctionne et ne cherche pas à comprendre

    C'est pour ton bien, tu dis que tu débutes alors tu as tout intérêt à comprendre chaque instruction et chaque fonction de ton code. On est là pour t'aider.

    1-Les compilateurs de ces langages sont maintenant si évolués que ça devient très facile de corriger les erreurs. Donc des fois tu n'as plus d'erreurs mais le programme ne fait pas ce que tu veux...
    Il est donc primordiale que tu saches au moins à peu près ce que fait chaque portion de codes se terminant avec un point virgule ";"

    2-Déjà petite correction, il faut que tu revoies la syntaxe de tes scanf et printf pour les chaines de caractère c'est %s pour spécifier le format.
    Code:
    printf("entrez la couleur de voiture \n");
    		scanf("%c",&p->color) ;
    De plus pour le scanf il faut toujours lui passer l'adresse de la variable où tu veux stocker ce que tu rentres, donc l'adresse de ton tableau color[10].
    pour x par exemple il suffisait de faire scanf("%d",&x); Et x est l'entier dans lequel tu veux sauvegarder la valeur, son adresse s'obtient avec &x.
    Là pour le tableau comment fais tu ? Sachant que l'adresse d'un tableau c'est déjà son nom sans les crochets...[plus précisément c'est l'adresse du premier élément du tableau]
    Tu n'as plus besoin de lui mettre le &

    3- Pour un débutant tu utilises pas mal de pointeurs en plus de tes variables "p" que tu déclares partout, ça va pas t'aider à y voir clair, ça entraîne le flou dans ton code.

    4-Tu devrais commenter chaque ligne, ça te permettra de comprendre le code, ta variable TMax elle sert à quoi concrètement , tes fonctions saisie, insertHead etc. Commente les !
    par exemple tu écris ta fonction
    Code:
    insertHead(Element* l,int val) et dedans p->num=val;
    puis tu utilises
    Code:
    p=insertHead(first,1) ;
    le 1 il va aller dans p->num, c'est le numéro matricule 1 ?
    bref commente ton code tu y verras plus clair.


    Compile ce code et dis déjà si c'est ça que tu veux faire avec ton programme, ça permettrait de savoir exactement où on va. Mais ton code on va le corriger, celui là il te servira pas, c'est juste pour le résultat.

    Code:
    #include <iostream>
    #include<string>
    #include <vector>
    
    using namespace std;
    
     long ID = 0;
    
    struct Element{
    
    	long id;
    	string numMat;	
    	string color;
    };
    
    Element saisie()
    {
    	Element p;	
    	cout<<"chemin1 *-*\n";
    	cout<<"entrez la matricule de voiture \n";
    	getline(cin, p.numMat);
    	cout<<"entrez la couleur de voiture \n";
    	getline(cin, p.color);
    	p.id=ID;
    	return p;
    }
    
    int main()
    {
    
    
    	vector<Element> Enregistrement (0);
    	string sx;
    	
    	do
    	{
    		ID++;
    		Enregistrement.push_back(saisie());
    		cout<<"voulez-vous continuer ? si oui taper 1 sinon taper 0\n";
    		 getline(cin, sx);
    		
    	} while (sx == "1");
    
    
    	for (vector<Element>::iterator iter = Enregistrement.begin(); iter != Enregistrement.end(); ++iter) {
    		cout << "\nVoiture "<< (*iter).id << endl;
    		cout << "Immatrculation => " << (*iter).numMat << endl;
    		cout << "Couleur => " << (*iter).color << endl;
    	}
    
    	getchar();
    
    
    	return 0;
    }
    Court, précis et trés compréhensif. j’ai bien compris

    Merci pour ses explications, j’ai recherché sur le net mais sans avoir bien compris. Maintenant c’est plus clair

Discussions similaires

  1. probleme execution .jar
    Par invitec7fd8fb0 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 15/09/2011, 03h23
  2. Problème d'éxécution de programmes sur TI 92
    Par invite4eec7706 dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 03/04/2011, 17h59
  3. Probleme d'execution
    Par invite560e37d4 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 03/10/2009, 13h01
  4. Probleme .vbp (execution)
    Par invite90c5d9d9 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 22/04/2008, 18h00
  5. Problème d'exécution JAVA
    Par invited82a1853 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/11/2005, 09h31