titof3812
Messages postés
18
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
12 décembre 2007
28 nov. 2007 à 23:07
Salut oli1207
le probleme principale dans ton test est que un numero SS a 15 chiffre donc ton insee_car en a 13 et ne peut pas ter code dans un int par atoi tu doit au minimum utiliser un long long
suivant le compilateur tu peut utiliser
insee_nb =atoll (insee_car)
ou mieux
insee_nb =strtoll(insee_car, (char **)NULL, 10);
Je t'ai fait une petite correction ( sur mac avec un compilateur gcc) qui semble fonctionner essaie de voir ce que tu peut en tirer.
Note
1 Je me suis defineie TRUE et false et passe les bool en int paour pas me prendre la tete a trouver les definition en gcc mais tu doit pouvoire revenir au bool sur ton system.
2 ta fonctin longueur existe deja et s'appelle strlen en C
3 masouchaine2 doit demarrer de 13 et pas de 14
4 cle_nb etait mal definie car insey_key est deja un int donc atol ( inseykey) n'est pas correct
Bonne continuation mais structure un peu c'est plus facile alire
--------------------------------------
//#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define MAXI1 15
#define TRUE 1
#define FALSE 0
// prototypage
int test(int an);
void sschaine(char insee_string[MAXI1+5],int inddeb,int long1 , char masouschaine[MAXI1+5]);
int longueur(char machaine[MAXI1+5]);
void main (void)
{
int valid = FALSE; //délclaration des variable
int bissextile;
char insee_car[MAXI1+5]="";
char insee_string[MAXI1+5]="";
char masouschaine[MAXI1+5]="";
char masouschaine1[MAXI1+5]="";
char masouschaine2[MAXI1+5]="";
int insee_key;
int annee;
int cle_nb;
int insee_nb;
if (TRUE)
printf ( "True=%i\n",TRUE);
else
printf ("True= %i\n",FALSE);
do //boucle
{
printf ("Saisir votre numéro Insee \n");
scanf(" %s",&insee_string, '\0');
sschaine(insee_string,0,1,masouschaine);
sschaine(insee_string,0,13,insee_car);
sschaine(insee_string,13,2,masouschaine2);
insee_key = atoi(masouschaine2);
printf ("%s\n%s\n%s\n", masouschaine, insee_car, masouschaine2);
if ( longueur(insee_string) != MAXI1 ) //vérification de la longueur du numéro
{
printf("saisie1 éronnée \n");
}
else
{
if (( atoi(masouschaine) != 1) && ( atoi(masouschaine) != 2) ) //différent de 1 ou 2(vérifier fille ou garçon
{
printf( "saisie2 éronnée \n");
}
else
{
int cle_nb=(insee_key);
long long insee_nb;
insee_nb =strtoll(insee_car, (char **)NULL, 10);
//insee_nb =atoll(insee_car);
if ((97-(insee_nb%97))!= cle_nb) //opération pour déterminer si l'année est bissextile ou non
{
printf("saisie3 éronnée \n");
}
else
{
printf ("saisie valid \n");
valid =TRUE ;
}
}
}
} while (valid == FALSE);
printf ("sortie boucle\n");
sschaine(insee_string,1,2,masouschaine);
annee = atoi(masouschaine);
annee = annee + 1900;
bissextile = test(annee);
sschaine(insee_string,0,1,masouschaine);
if (atoi(masouschaine) == 1)
{
if (bissextile == TRUE)
{
printf( "Monsieur vous êtes né une année bissextile \n");
}
else
{
printf( "Monsieur vous êtes né une année non bissextile \n");
}
}
else
{
if (bissextile == TRUE )
{
printf( "Madamme vous êtes née une année bissextile \n");
}
else
{
printf( "Madamme vous êtes née une année non bissextile \n");
}
}
}
// Fin du main
int test(int an) //test de l'année bisextile
{
int bissext = FALSE;
if ((an % 4 )!= 0)
bissext =FALSE ;
else
{
if ((an % 100 )!= 0)
bissext =TRUE ;
else
{
if ((an % 400 )!= 0)
bissext = FALSE ;
else
bissext = TRUE ;
}
}
return bissext;
}
// Fin de la fonction test()
void
sschaine(char insee_string[MAXI1+5],int inddeb,int long1 , char masouschaine[MAXI1+5]) //fonction sschaine( )
{
int j;
int indfin;
int i;
indfin = inddeb + long1 ;
j = 0;
for (i = inddeb; i < indfin ; i++)
{
masouschaine[j] = insee_string[i];
j++ ;
}
masouschaine[j] ='\0';
}
// fin de la fonction sschaine()
int
longueur(char machaine[MAXI1+5]) //fonction longueur pour vérifier la longueur de la chaine
{
int i = 0;
while (machaine[i] != '\0')
i = i + 1;
return i;
}