Problème de code vérification du scanf

Fermé
blafarus Messages postés 1 Date d'inscription vendredi 15 novembre 2013 Statut Membre Dernière intervention 15 novembre 2013 - Modifié par blafarus le 15/11/2013 à 18:27
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 nov. 2013 à 22:30
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
15 nov. 2013 à 22:30
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