Estructuras en C (ISBN)

Iniciado por andie13, 9 Noviembre 2016, 00:55 AM

0 Miembros y 1 Visitante están viendo este tema.

andie13

¡Hola!
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!


#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

geeke

Debes recoger los tres campos usando scanf o fgets no uses gets, luego concaternarlos en un buffer con snprintf para trabajar con ellos. Veo que usas un entero para el dígito de control, recuerda que también puede ser una X si el resto de la división por 11 es 10 los mas conveniente seria usar un char.

andie13

Voy a probar. Muchas gracias por contestar.