Prob fonction d'affichage en C

Résolu/Fermé
kent - 24 janv. 2009 à 15:38
 kent - 24 janv. 2009 à 16:56
Bonjour,
J'ai un soucis ac ma fonction d'affichage es ce que qque peu me dire le soucis?
#include<stdio.h>
#include<windows.h>
#define max 50

void encodage(int *,int);
void affichage(int*,int);
void tri(int*,int);


void main()
{
	int Date[max][3],ndate;

	do
	{
	printf("Saisir le nombre de dates a saisir:");
	fflush(stdin);
	scanf("%d",&ndate);
	}while(ndate<=0 || ndate>max);

	//Fonction encodage

	encodage(&Date[0][0],ndate); 

	affichage(&Date[0][0],ndate);
}
 
/**********************************************************
/*														  */
/*	input: ndate: nombre d'élément dans le tableau		  */
/*		   pt: Adresse du tableau						  */	
/*														  */
/*  process:lit les dates et  les places dans le tableau  */
/*			dont l'adresse est donnée					  */
/*														  */
/* output:/												  */
/**********************************************************/

void encodage (int *Date,int ndate)
{
	int mois,jours,annee,i;

	do{

		i=0;
		do
		{
		printf("Encoder le jour de la %d date:",i+1);
		fflush(stdin);
		scanf("%d",&jours);
		*Date=jours;

		printf("Encoder le mois de la %d date:",i+1);
		fflush(stdin);
		scanf("%d",&mois);
		*(Date+1)=mois;

		printf("Encoder le annee de la %d date:",i+1);
		fflush(stdin);
		scanf("%d",&annee);
		*(Date+2)=annee;
		i++;
		Date++;
		system("cls");
		} while(i<ndate);

	}while(ndate<=0 || ndate>max);


}

/**********************************************************
/*														  */
/*	input: ndate: nombre d'élément dans le tableau		  */
/*		   pt: Adresse du tableau						  */	
/*														  */
/*  process:Affiche les dates encodées					  */
/*														  */
/* output:/												  */
/**********************************************************/

void affichage (int *Date,int ndate)
{
	int i=0;

	printf("Les Dates sont donc:\n");
	printf("_____________________\n\n");

	
	do
	{
		printf("%d / %d / %d \n\n",*Date,*(Date+1),*(Date+2));
		Date=Date+3;
		i++;

	}while(i<ndate)	;


}
A voir également:

3 réponses

bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
24 janv. 2009 à 15:59
Il me semble que tu modifies les valeurs de tes dates localement à ta fonction encodage, du coup tu perds tes valeurs en sortant de la fonction.

edit : c'est bien ça
0
Je situe pas trop bien tu pourrais me montrer?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
24 janv. 2009 à 16:20
Tout est dans le type du premier argument de ta fonction encodage.
Je n'ai jamais fait comme tu l'as fait donc je ne sais pas vraiment trop te dire ce que ça fait très exactement, mais en tout cas l'erreur vient bien de là.

Je l'aurais fait comme ça :

#include<stdio.h>
#include<windows.h>
#define MAX 50

void encodage (int Date[MAX][3], int ndate);
void affichage (int Date[MAX][3], int ndate);

int main()
{
	int Date[MAX][3],ndate;

	do
	{
		printf("Saisir le nombre de dates a saisir:");
		fflush(stdin);
		scanf("%d",&ndate);
	}while(ndate<=0 || ndate>MAX);

	//Fonction encodage

	encodage(Date,ndate);

	affichage(Date,ndate);

	return 0;
}

/**********************************************************
/*														  */
/*	input: ndate: nombre d'élément dans le tableau		  */
/*		   pt: Adresse du tableau						  */
/*														  */
/*  process:lit les dates et  les places dans le tableau  */
/*			dont l'adresse est donnée					  */
/*														  */
/* output:/												  */
/**********************************************************/

void encodage (int Date[MAX][3], int ndate)
{
	int mois, jours, annee, i;

	for(i = 0 ; i < ndate ; i++)
	{
		printf("Encoder le jour de la %de%ce date:", i+1, (i == 0) ? 'r' : 'm');
		fflush(stdin);
		scanf("%d", &jours);
		Date[i][0] = jours;

		printf("Encoder le jour de la %de%ce date:", i+1, (i == 0) ? 'r' : 'm');
		fflush(stdin);
		scanf("%d", &mois);
		Date[i][1] = mois;

		printf("Encoder le jour de la %de%ce date:", i+1, (i == 0) ? 'r' : 'm');
		fflush(stdin);
		scanf("%d", &annee);
		Date[i][2] = annee;
		
	}

}

/**********************************************************
/*														  */
/*	input: ndate: nombre d'élément dans le tableau		  */
/*		   pt: Adresse du tableau						  */
/*														  */
/*  process:Affiche les dates encodées					  */
/*														  */
/* output:/												  */
/**********************************************************/

void affichage (int Date[MAX][3], int ndate)
{
	int i;

	printf("Les Dates sont donc:\n");
	printf("_____________________\n\n");


	for(i = 0 ; i < ndate ; i++)
	{
		printf("%d / %d / %d \n\n", Date[i][0], Date[i][1], Date[i][2]);
	}
}




Je ne supporte pas les while() quand une for() suffit mais ça ne change rien ça.
0
J'ai trouver en fait ...

.
.
.
printf("Encoder le annee de la %d date:",i+1);
		fflush(stdin);
		scanf("%d",&annee);
		*(Date+2)=annee;
		i++;
		Date=Date+3;  //Correction
		system("cls");
		} while(i<ndate);
0