Problème de code vérification du scanf

blafarus Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour j'ai fait un code qui doit vérifier si le numéro isbn (numéro de référence de livres) rentré est correct ou non.
J'ai un problème lorsque je ne rentre que des 0: "0000000000" Le programme est censé me retourner incorrect la valeur de rep vaut 3.

Lorsque je rentre le code directement sur le programme comme suit, pas de problème.

<spoiler>
#include<stdio.h>


#include<stdlib.h>

#include<string.h>



int calculmath(char chaine[11]);





int main()

{ char peon[11]={0,0,0,0,0,0,0,0,0,0};

int rep;



rep=calculmath(peon);

printf("la valeur de rep vaut %d\n",rep);

if(rep==1){

printf("code correct\n");

}else{

printf("code incorrect\n");

}

system("PAUSE");

return 0;



}

int calculmath(char chaine[11]){

int s[11],s1[11],s2[11];

for(int i=0;i<11;i++){

if(chaine[i]==88||chaine[i]==120){

s[i]=10;

}else{

s[i]=chaine[i];

}

}

s2[0]=chaine[0];

s1[0]=chaine[0];

for (int i=1; i<11;i++){

s1[i]=s[i]+s1[i-1];

s2[i]=s1[i]+s2[i-1];

}



/*for(int i=0;i<11;i++){

printf("%c\n",s2[i]);

}*/



if(s2[9]==0){

return(3);//erreur code comprenant seulement des 0

}else{



if(s2[9]%11==0){

return(1);//code correct

}else{

return(2);//code incorrect

}

}

}
</spoiler>

Si jamais je rentre le code via un scanf, les 10 "0" ne retourne plus incorrect.

<spoiler>
#include<stdio.h>


#include<stdlib.h>

#include<string.h>



int calculmath(char chaine[11]);





int main()

{ char peon[11];

int rep;

scanf("%s",peon);

printf("%s",peon);

rep=calculmath(peon);

printf("la valeur de rep vaut %d\n",rep);

if(rep==1){

printf("code correct\n");

}else{

printf("code incorrect\n");

}

system("PAUSE");

return 0;



}

int calculmath(char chaine[11]){

int s[11],s1[11],s2[11];

for(int i=0;i<11;i++){

if(chaine[i]==88||chaine[i]==120){

s[i]=10;

}else{

s[i]=chaine[i];

}

}

s2[0]=chaine[0];

s1[0]=chaine[0];

for (int i=1; i<11;i++){

s1[i]=s[i]+s1[i-1];

s2[i]=s1[i]+s2[i-1];

}



/*for(int i=0;i<11;i++){

printf("%c\n",s2[i]);

}*/



if(s2[9]==0){

return(3);//erreur code comprenant seulement des 0

}else{



if(s2[9]%11==0){

return(1);//code correct

}else{

return(2);//code incorrect

}

}

}
</spoiler>

avez vous une idée du pourquoi de la chose?
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Lorsque tu fais scanf("%s",...), l'utilisateur rentre pas des chiffres mais des caractères. S'il tape sur 0, cela sera le caractère '0' (qui vaut 48) et non le chiffre 0.
Il faut donc convertir le caractère en chiffre. Pour cela, il suffit de faire une soustraction (peon[i]-'0'). Et tout rentrera dans l'ordre.

Cdlt,
0