oli1207
Messages postés4Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention29 novembre 2007
-
28 nov. 2007 à 01:00
oli1207
Messages postés4Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention29 novembre 2007
-
29 nov. 2007 à 00:19
re bonjour
voila j'ai un problème j'arrive pas a faire marcher la fonction atoi je sais plus quoi faire j'ai essayé ce que je savais mais rien y fait il veut pas passer cette condition quoi que ce soit que tu rentre qui peut m'aider svp ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 28 nov. 2007 à 02:07
Hmmm
insee_car c'est quoi ?
Si il s'agit bien d'un pointeur char (char*), le problème vient de ton calcule.
Si il s'agit d'autre chose, atoi ne convertie que des char*
D'après le nom, je présuppose que, si il ne s'agit pas d'un pointeur char, il doit s'agir d'un char.
Si c'est le cas, inutile de passer par une fonction. Suffis de soustraire 0x30 (le caractère '0')
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 (premier chiffre du numéro pour vérifier fille ou garçon{
printf(
"saisie2 éronnée \n"); }
else{
int cle_nb=atoi(insee_key);
int insee_nb=atoi(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{
valid =
true ;}
}
}
}
while (valid ==
false);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");}
}
system(
"pause");}
// Fin du main
bool
test(
int an) //test de l'année bisextile{
bool
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],
int inddeb,
int long1 ,
char masouschaine[MAXI1]) //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]) //fonction longueur pour vérifier la longueur de la chaine{
int i = 0;
while (machaine[i] !=
'\0'){
i = i + 1;
}
return i;}
voila c'est ce qui ya en gras mais si vous voyez des erreurs vous pouvez me dire lesquelles elles sont svp ? merci je ne crois pas qu'il y en ai mais on ne sait jamais
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201917 28 nov. 2007 à 22:11
Je remets ton code présenté convenablement.
Quand on cherche des réponses, on fait en sorte de ne pas rebuter ceux qui seraient disposés à les apporter.
Tu repartiras d'un copier coller de ce qui est dessous.
titof3812
Messages postés18Date d'inscriptionlundi 12 novembre 2007StatutMembreDernière intervention12 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
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
{
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;
}
oli1207
Messages postés4Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention29 novembre 2007 29 nov. 2007 à 00:19
merci mai le programme ne fonctionne toujours pas alors vu que sa fait 2 jours que je me fai chi.... sur ce prog ben j'ai virer la condition avec le modulo 97 voila bon ben merci a tous sinon sa marche mais la saisie 3 est enlever voila a++