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 -
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>
Si jamais je rentre le code via un scanf, les 10 "0" ne retourne plus incorrect.
<spoiler>
avez vous une idée du pourquoi de la chose?
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></spoiler>
#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
}
}
}
Si jamais je rentre le code via un scanf, les 10 "0" ne retourne plus incorrect.
<spoiler>
#include<stdio.h></spoiler>
#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
}
}
}
avez vous une idée du pourquoi de la chose?
A voir également:
- Problème de code vérification du scanf
- Code ascii - Guide
- Code de déverrouillage oublié - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
1 réponse
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,
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,