Ir ao conteúdo
  • Cadastre-se

C o que que está errado nesse programa?


Amanda Kellen

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!