elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Estructuras en C (ISBN)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Estructuras en C (ISBN)  (Leído 1,610 veces)
andie13

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Estructuras en C (ISBN)
« en: 9 Noviembre 2016, 00:55 am »

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

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


« Última modificación: 9 Noviembre 2016, 15:20 pm por andie13 » En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Estructuras en C (ISBN)
« Respuesta #1 en: 10 Noviembre 2016, 17:22 pm »

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.


En línea

andie13

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Estructuras en C (ISBN)
« Respuesta #2 en: 11 Noviembre 2016, 01:04 am »

Voy a probar. Muchas gracias por contestar.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructuras.....
Programación C/C++
Rodri 1 2,503 Último mensaje 6 Octubre 2011, 19:46 pm
por satu
Estructuras en C++
Programación C/C++
jjrl1984 1 1,670 Último mensaje 18 Diciembre 2012, 02:27 am
por naderST
Estructuras en C
Programación C/C++
Redisteon 1 1,566 Último mensaje 10 Agosto 2013, 10:39 am
por Eternal Idol
Estructuras en C
Programación C/C++
Redisteon 4 2,198 Último mensaje 11 Agosto 2013, 19:25 pm
por amchacon
Estructuras en C « 1 2 »
Programación C/C++
Yc 12 4,434 Último mensaje 23 Marzo 2014, 15:07 pm
por Yc
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines