Ir ao conteúdo

Posts recomendados

Postado

o programa deveria calcular o ultimo digito do isbn e só deve aceitar quando se digita 12 numeros,porém mesmop quando digito 12 numeros o program mostra como se tivesse digitado mais,o que faço?

#include <stdio.h>
int verifica(char *);
void leitura(char *);
void calculaDV(char*);
void imroimi(char*);
int main()
{
char isbn[14];
leitura(isbn);
verifica(isbn);
calculaDV(isbn);
imprimi(isbn);
return 0;
}
int verifica(char *y)
{
    int i;
    if(y!=11)
    {
        return -1;

    }
    else
    {
    for(i=0;i<12;i++)
    {

        if((y[i]!='0')||(y[i]!='1')||(y[i]!='2')||(y[i]!='3')||(y[i]!='4')||(y[i]!='5')||(y[i]!='6')||(y[i]!='7')||(y[i]!='8')||(y[i]!='9'))
        {
         return 1;
        }
    }

    }
}

void leitura(char *x)
{
    int ver;
    printf("Digite os 12 primeiros digitos do ISBN-13(somente numeros):");
    gets(x);
    ver=verifica(x);
    while(ver!=1)
    {
    printf("Numero incorreto-Digite os 12 primeiros digitos do ISBN-13(somente numeros)");
    gets(x);
    ver=verifica(x);
    }


}
void calculaDV(char *z)
{
    int soma=0, i, ver;
    for(i=0;i<13;i++)
    {
        if(i%2==0)
        {
            soma+=1*(z[10-i]-48);
        }
        else
        {
            soma+=3*(z[10-i]-48);
        }
    }
    ver=10-(soma%10);
    z[13]=ver;
}
void imprimi(char *w)
{
    int i;
    printf("ISBN-13 Valido: ");
    for(i=0;i<3;i++)
    {
    printf("%c",w[i]);
    }
    printf("-");
    printf("%c",w[3]);
    for(i=4;i<6;i++)
    {
        printf("%c",w[i]);
    }
    printf("-");
    for(i=6;i<11;i++)
    {
        printf("%c",w[i]);
    }
    printf("-");
    printf("%c",w[12]);
}

 

  • Curtir 1
Postado

@Amanda Kellen   seu código estava com um erro e não compilava, então modifique algumas linhas ,  então agora ele funciona, porém pelo que entendi qualquer conjunto de 12 números será considerado um código isbn válido .     seu código ficou assim :

#include <stdio.h>
int  verifica(char *);
void leitura(char  *);
void calculaDV(char*);
void imroimi(char  *);
char isbn[14];
int digver;
char cisbn[12]={9,7,8,0,3,0,6,4,0,6,1,5};/*codigo isbn válido*/
int main(){
    leitura  (isbn);
    verifica (isbn);
    calculaDV(isbn);
    imprimi  (isbn);
    return 0;
}
int verifica(char *y)
{
    int i;
    if(strlen(y) != 12)
    {
        return -1;
    }
    else
    {
        for(i=0;i<12;i++)
        {
            if(y[i]!='0'&&y[i]!='1'&&y[i]!='2'&&y[i]!='3'&&y[i]!='4'&&
               y[i]!='5'&&y[i]!='6'&&y[i]!='7'&&y[i]!='8'&&y[i]!='9')
            {
               return -1;
            }
        }
    }
    return 1;
}

void leitura(char *x)
{
    int ver;
    printf("Digite os 12 primeiros digitos do ISBN-13(somente numeros):");
    gets(x);
    ver=verifica(x);
    while(ver!=1)
    {
    printf("Numero incorreto-Digite os 12 primeiros digitos do ISBN-13(somente numeros)");
    gets(x);
    ver=verifica(x);
    }
    strcpy(isbn,x);
}
void calculaDV(char *z)/*digito verificador*/
{
    char s[2];
    int soma=0, i,h, ver,total,ver2,dver;
    digver=0;
    for(i=0;i<12;i++)
    {
        s[0]=z[i];
        if(i%2==0)
        {
            soma+=1*atoi(s);
        }
        else
        {
            soma+=3*(atoi(s));
        }
    }
    ver=soma/10;
    ver2=soma-ver*10;
    if(ver2==0)dver=0;
    else dver=10-ver2;
    total=soma+dver;
    if(total % 10 == 0)digver=1;
    z[13]=dver;
    isbn[13]=dver+48;/*digito de verificacao*/
}
int imprimi(char *w)
{
    if(digver==1){
        int i;
        printf("\n\n");
        printf("ISBN-13 Valido: ");
        for(i=0;i<3;i++)
        {
            printf("%c",w[i]);
        }
        printf("-");
        for(i=3;i<6;i++)
        {
            printf("%c",w[i]);
        }
        printf("-");
        for(i=6;i<11;i++)
        {
            printf("%c",w[i]);
        }
        printf("-");
        printf("%c",w[11]);
    }
    else{
        printf("ISBN_13 Invalido");
    }
    printf("%c\n\n",w[13]);
    return 0;
}

 

 

  • Curtir 2
Postado

o programa que você editou compila porém não apresenta o resultado esperado ao digitar o isbn:978853520871(12 primeiros digitos) deveria apresentar 9 como digito verificar ao invés disso apresenta o digito 19.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!