examen C .

Aller en bas

examen C .

Message  Xav le Sam 29 Aoû - 16:16

Bonjour,

je voudrais savoir si par hasard quelqu'un a encore le code de l'examen de juin ! je voudrais regarder un peu comment ca marche, j'avoue avoir un peu de mal Sad

Bonne journée

Xav

Messages : 15
Date d'inscription : 18/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: examen C .

Message  Xav le Lun 31 Aoû - 0:52

Rebonjour,
petite question sur le langage C plus général :

j'ai dans mon programme une fonction qui remplie un tableau dans une structure :
typedef struct entreprise {
ADRESSE adresse;
int numero;
char nom[40];
char tabprog[5][40];
}ENTREPRISE;
et donc la fonction remplit les 5 lignes de tabprog avec des chaines de caractère via scanf (normal quoi !)
cette structure rejoint une liste chainée via une autre fonction, et quand je veux imprimer le tabprog du premier maillon de cette liste avec la fonction :
printf("\n%s",liste->front->ent->tabprog[0]) ; ca ne marche pas.
Par contre printf("\n%s",liste->front->ent->tabprog[1]) ; va m'imprimer la valeur enregistrer dans tabprog[0].
Mais impossible alors d'imprimer la valuer de tabprog[4]. J'ai vérifié que les valeurs était bien enregistré avec des printf juste apres les scanf, le décalage survient uniquement quand je passe par la liste.

Si quelqu'un peut m'éclairer ce serait sympa !
(Je sais pas si c'est vraiment clair ce que j'ai écrit par contre :p)

Xav

Messages : 15
Date d'inscription : 18/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: examen C .

Message  Nabu le Lun 31 Aoû - 11:32

C'est très certainement une erreur dans ton code : Essaye de le copier ici, on pourra déjà (essayer de) mieux voir ou se situe le problème ! Wink

Nabu

Messages : 30
Date d'inscription : 19/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: examen C .

Message  Xav le Lun 31 Aoû - 12:13

Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

typedef struct adresse {
        char ruenum[40];
        int codepost;
        char localite[40];
        }ADRESSE;
typedef struct entreprise {
        ADRESSE adresse;
        int numero;
        char nom[40];
        char tabprog[5][40];
        }ENTREPRISE;
typedef struct cell {
        ENTREPRISE *ent;
        cell* next;
        }CELL;
typedef struct list{
        CELL *front,*end;
        CELL *current, *previous;
        int size;}LIST;
       
LIST* list_create(){
      LIST *liste=(LIST*)malloc(sizeof(LIST));
      if (liste==NULL)return NULL;
      liste->front=liste->end=NULL;
      liste->current=liste->previous=NULL;
      liste->size=0;
      return liste;}

int insert_back(LIST* liste,ENTREPRISE entreprise){
    CELL *cell=(CELL*)malloc(sizeof(CELL));                                                                                                   
    if(cell==NULL)return -1;
    cell->ent=&entreprise;
    cell->next=NULL;
    if(liste->front==NULL)liste->front=liste->end=cell;
    else liste->end->next=cell;
    liste->end=cell;
    liste->size++;
    return 0;}
   
   
   
         
ENTREPRISE newentreprise()// fonction qui crée un maillon entreprise
{   
    ENTREPRISE entreprise;
    printf("\nEntrez le nom de l'entreprise : ");scanf("%s", &entreprise.nom);
    printf("\nEntre le numero de l'entreprise: ");scanf("%d",&entreprise.numero);
    printf("\nEntrez les 5 langages de programmation utilisés par votre entreprise : ");
    for (int i=0;i<5;i++){scanf("%s",&entreprise.tabprog[i][40]);}
    for (int j=0;j<5;j++){printf("\n Le langage de programmation n%d est : %s",j+1,&entreprise.tabprog[j][40]);}/* ligne de verif*/
    printf(" \nEntrez la rue et le numéro de votre entreprise en separant chaque mot par _ : ");scanf("%s",&entreprise.adresse.ruenum);
    printf(" \nEntrez le code postal de votre entreprise : ");scanf("%d",&entreprise.adresse.codepost);
    printf(" \nEntrez la localite de votre entreprise : ");scanf("%s",&entreprise.adresse.localite);
    printf("\n\n L'adresse est donc :\n %s \n %d %s",entreprise.adresse.ruenum,entreprise.adresse.codepost,entreprise.adresse.localite);//verif
                                                                                                       
   
   
   
    // apres il faut encore ajouter cell a la liste, pas encore defini (donc la fonction entrera la liste en donnée)
    return entreprise;
    }
   
LIST* creationliste(LIST*liste)
{
     
      int c=0;
      do{
      ENTREPRISE ent=newentreprise();
      insert_back(liste,ent);
      printf("Voulez-vous encodez une autre entreprise ? oui(1) non(2)");scanf("%d",&c);
      }
      while (c==1);
      printf("\n%s",liste->front->ent->nom);//verif
      return liste;
      }
     
void remplirfichiertxt(LIST*liste){/*fonction qui a la base sers a remplir le fichier texte, mais suite a qql probleme avec printf
je m'en suis servi pour faire des test, et je no comprend pas pourquoi printf de tabprog[4] m'affiche le contenu de tabprog[3]*/
    printf("\n%s",liste->front->ent->tabprog[4]);
        printf("\n%s",liste->front->ent->tabprog[1]) ;
    printf("\n%s",liste->front->ent->tabprog[2]) ;
    }
   
     
     
     
     
   
   



int main() {
   
    LIST *liste=list_create();
    liste=creationliste(liste);
    remplirfichiertxt(liste);
   
   
   
   
   
   
   
    getch();
}

/
voila !

Xav

Messages : 15
Date d'inscription : 18/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: examen C .

Message  Nabu le Lun 31 Aoû - 13:13

Code:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

typedef struct adresse
{
        char ruenum[40];
        int codepost;
        char localite[40];
}ADRESSE;

typedef struct entreprise
{
        ADRESSE adresse;
        int numero;
        char nom[40];
        char tabprog[5][40];
}ENTREPRISE;

typedef struct cell
{
        ENTREPRISE *ent;
        cell* next;
}CELL;

typedef struct list
{
        CELL *front,*end;
        CELL *current, *previous;
        int size;
}LIST;
     

LIST* list_create()
{
      LIST *liste=(LIST*)malloc(sizeof(LIST));
      if (liste==NULL)
        return NULL;
      liste->front=liste->end=NULL;
      liste->current=liste->previous=NULL;
      liste->size=0;
      return liste;
}

int insert_back(LIST* liste,ENTREPRISE* entreprise)
{
   CELL *temp;
    CELL *cell=(CELL*)malloc(sizeof(CELL));                                                                                                 
    if(cell==NULL)
      return -1;

    cell->ent=entreprise;
    cell->next=NULL;

    if(liste->front==NULL)
      liste->front = cell;
    else
   {      
      temp = liste->front;
      while(temp->next != NULL)
         temp = temp->next;

      temp->next = cell;
      
   }

    liste->size++;
    return 0;
}
 
     
       
ENTREPRISE* newentreprise()// fonction qui crée un maillon entreprise

    ENTREPRISE *entreprise = (ENTREPRISE*)malloc(sizeof(ENTREPRISE));
   printf("\nEntrez le nom de l'entreprise : ");scanf("%s", &entreprise->nom);
    printf("\nEntre le numero de l'entreprise: ");scanf("%d",&entreprise->numero);
    /*printf("\nEntrez les 5 langages de programmation utilisés par votre entreprise : ");
    for (int i=0;i<5;i++){scanf("%s",&entreprise.tabprog[i][40]);}
    for (int j=0;j<5;j++){printf("\n Le langage de programmation n%d est : %s",j+1,&entreprise.tabprog[j][40]);}
    printf(" \nEntrez la rue et le numéro de votre entreprise en separant chaque mot par _ : ");scanf("%s",&entreprise.adresse.ruenum);
    printf(" \nEntrez le code postal de votre entreprise : ");scanf("%d",&entreprise.adresse.codepost);
    printf(" \nEntrez la localite de votre entreprise : ");scanf("%s",&entreprise.adresse.localite);
    printf("\n\n L'adresse est donc :\n %s \n %d %s",entreprise.adresse.ruenum,entreprise.adresse.codepost,entreprise.adresse.localite);*/
                                                                                                     
   
    // apres il faut encore ajouter cell a la liste, pas encore defini (donc la fonction entrera la liste en donnée)
    return entreprise;
    }
 
LIST* creationliste(LIST*liste)
{
      ENTREPRISE *ent;
      int c=0;
      do{
          ent=newentreprise();
          insert_back(liste,ent);
          printf("Voulez-vous encodez une autre entreprise ? oui(1) non(2)");scanf("%d",&c);
     
     }while (c==1);

     //printf("\n Resultat Sortie : %d",liste->front->ent->numero);//verif
      return liste;
      }
   
void remplirfichiertxt(LIST*liste)

{/*fonction qui a la base sers a remplir le fichier texte, mais suite a qql probleme avec printf
je m'en suis servi pour faire des test, et je no comprend pas pourquoi printf de tabprog[4] m'affiche le contenu de tabprog[3]*/
   printf("\nListe : \n");
   while (liste->front != NULL)
   {
      printf("\n\n%s",liste->front->ent->nom) ;
      printf("\n%d",liste->front->ent->numero) ;
      liste->front = liste->front->next;
   }
 }
 
   
   
   
 



int main() {
 
    LIST *liste=list_create();
    liste=creationliste(liste);
    remplirfichiertxt(liste); 
 
 
    getch();

   return 0;
}

Ta liste chainée n'était pas bien implémentée dans insert_back() et dans creationliste() tu essayais d'utiliser une "entreprise" que tu avais créé dans la fonction newentreprise() : Mais tu l'avais déclaré en dur au lieu de passer par un malloc, du coup en sortant de la fonction ta variable n'existait plus ! Wink

Nabu

Messages : 30
Date d'inscription : 19/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: examen C .

Message  Xav le Lun 31 Aoû - 15:41

A ben merci beaucoup ! je vais tester ca de suite Smile

Edit : probleme réglé, merci beaucoup Smile

Xav

Messages : 15
Date d'inscription : 18/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: examen C .

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum