Estoy intentando hacer un programa que calcule digito de control de un codigo ISBN introducido por el usuario, a través de 3 campos diferenciados, utilizando estructuras. Para calcular el digito de control hay que ir multiplicando cada cifra por su posición, y al final hallar el resultado de la suma módulo 11. Si el digito es 10, se pone X.
Lo que no entiendo es:
a) En el programa está indicado la longitud del vector introducido para hacer los cálculos, pero quiero hacerlo de modo genérico, el caso es que no sé como indicarlo.
b) No controlo bien las estructuras y el hecho de convertirlas de char a int etc.
He conseguido escribir el código casi totalmente, con la excepción de la función main, que soy consciente de que no está bien.
¡Muchas gracias!
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ISBN{
char camp1[6]; /*Grupo*/
char camp2[8]; /*Editor*/
char camp3[8]; /*Titulo*/
int control; /*Digito de control*/
};
struct ISBN controlisbn(char c1[], char c2[], char c3[]){
int control=0,i=0;
struct ISBN a;
for (i=0; i<1; i++){
a.camp1[i]=c1[i];
}
for (i=0; i<5; i++){
a.camp2[i]=c2[i];
}
for (i=0; i<9; i++){
a.camp3[i]=c3[i];
}
for (i=0; i<1; i++){
control+=c1[i]*(i+1);
}
for (i=0; i<5; i++){
control+=c2[i]*(i+3);
}
for (i=0; i<9; i++){
control+=c3[i]*(i+8);
}
a.control=control%11;
return(a);
};
void main(){
int a,b,c;
struct ISBN libro;
int x;
printf("Intruduzca primer campo del ISBN: ");
gets(a);
printf("Intruduzca segundo campo del ISBN: ");
gets(b);
printf("Intruduzca tercer campo del ISBN: ");
gets(c);
strcpy(a,libro.camp1);
strcpy(b,libro.camp2);
strcpy(c,libro.camp3);
x=controlisbn;
if (x==10){
printf("\nCaracter de control es X");
}
else{
printf("\nCaracter de control es %d", x);
}
}
//Ejemplo: 1-2345-6789----7