Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Amanda Kellen

C o que que está errado nesse programa?

Recommended Posts

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]);
}

 

Editado por Simon Viegas
Alterar tipo de CODE para "C Languages"
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

Já tentou dimensionar o tamanho do vetor para 12?

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Editado por Amanda Kellen
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×