examen C .
2 participants
Page 1 sur 1
examen C .
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
Bonne journée
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
Bonne journée
Xav- Messages : 15
Date d'inscription : 18/10/2008
Re: examen C .
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)
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
Re: examen C .
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 !
Nabu- Messages : 30
Date d'inscription : 19/09/2008
Re: examen C .
- 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();
}
/
Xav- Messages : 15
Date d'inscription : 18/10/2008
Re: examen C .
- 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 !
Nabu- Messages : 30
Date d'inscription : 19/09/2008
Re: examen C .
A ben merci beaucoup ! je vais tester ca de suite
Edit : probleme réglé, merci beaucoup
Edit : probleme réglé, merci beaucoup
Xav- Messages : 15
Date d'inscription : 18/10/2008
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|