Ir ao conteúdo

Posts recomendados

Postado

Olá,

não estou conseguindo utilizar de forma correta a funcao atoi em uma string para passar elementos caracteres para valores inteiros. O que preciso é passar cada valor separado de uma string para um valor em inteiro . O programa deve receber um valor de rg , por exemplo , e retornar se o digito digitado esta correto.

Aqui esta o codigo, retornando valores de numeros da tabela ascii:

#include <stdio.h>
#include <string.h>


int verificar(char *n){
	int i,j,soma=0, t=strlen(n),digito;

	for(i=t-2,j=2;i>0;i--){
		soma = soma + n[i] *j;
		j++;
		
	//	printf("\n\n%d\n\n",soma);
	}
	digito= 11 - (soma%11)  ;
	
	
	
	if(digito==10 || digito==11){
		digito=0; 
		if(digito==n[t])
			return 1;
	}
	else if(digito==n[t])
		return 1;
	else 
		return 0;
		
}

int main(){
	char n[50];
	int digito;
	
	printf("Digite o numero a ser verificado o digito(ex: 811057-3):\n");
	scanf("%s",n);
	if(verificar(n)==1) 
		printf("O numero de CPF,RG, CONTA BANCARIA dado foi %s\n seu digito eh %d corretamente.",n,digito);
	else
		printf("O numero de CPF,RG, CONTA BANCARIA dado foi %s\n seu digito(%d) nao confere com o valor dado.",n,digito);
}

Aqui está uma forma que eu tentei aplicar a função mas acabou não funcionando:

#include <stdio.h>
#include <string.h>


int verificar(char *n){
	int i,j,soma=0, t=strlen(n),digito;

	for(i=t-2,j=2;i>0;i--){
		soma = soma + atoi(n[i]) *j;
		j++;
		
	//	printf("\n\n%d\n\n",soma);
	}
	digito= 11 - (soma%11)  ;
	
	
	
	if(digito==10 || digito==11){
		digito=0; 
		if(digito==n[t])
			return 1;
	}
	else if(digito==n[t])
		return 1;
	else 
		return 0;
		
}

int main(){
	char n[50];
	int digito;
	
	printf("Digite o numero a ser verificado o digito(ex: 811057-3):\n");
	scanf("%s",n);
	if(verificar(n)==1) 
		printf("O numero de CPF,RG, CONTA BANCARIA dado foi %s\n seu digito eh %d corretamente.",n,digito);
	else
		printf("O numero de CPF,RG, CONTA BANCARIA dado foi %s\n seu digito(%d) nao confere com o valor dado.",n,digito);
}

Se alguém puder dar uma ajuda eu ficaria agradecido.

  • Curtir 1
Postado

@jajao     para verificar o cpf você precisa ver a quantidade de caracteres se é 11 pois se não for então o numero digitado está errado , mas para passar caracteres para inteiro você coloca uma variável do tipo inteiro igual o caractere , e no caso de dígitos de zero até 9 você precisa subtrair 48 pois os dígitos começam em 48 que é o zero , então seu código poderia ser assim  :

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int digito=5;
int verificar(char *n){
	int i,j=2,soma=0, t=strlen(n);
	for(i=0; i<t; i++){
        if(isdigit(n[i])){      /* verifica se é um digito de 1 ate 9 */
		    soma += n[i]-48*j;  /* converte caractere ASCII para inteiro */
		    j++;
        }
        else{
            if(n[i] !='-'){     /* esse caractere pode */
                return 2;
            }
        }
	}
	digito= 11 - (soma%11)  ;
	printf("digito na funcao = %d\n",digito);
	return 1;
/*
	if(digito==10 || digito==11){
		digito=0;
		if(digito==n[t])
			return 1;
	}
	else if(digito==n[t])
		return 1;
	else
		return 0;
*/
}
int main(){
	char n[50];
	int r;
    do{
        r=0;
	    printf("Digite o numero a ser verificado o digito(ex: 811057-3):\n");
        fflush(stdin);/* limpa o lixo do buffer */
	    scanf("%s",n);
	    r = verificar(n);
	    if(r == 2)printf("voce Digitou Cracteres Invalidos .\n");
    }while(r==2);
	if(r == 1){
		printf("O numero de CPF,RG, CONTA BANCARIA dado foi %s\n",n);
		printf("seu digito eh %d corretamente.",digito);
    }
	else{
		printf("O numero de CPF,RG, CONTA BANCARIA dado foi %s\n",n);
		printf("seu digito(%d) nao confere com o valor dado.",digito);
	}
    return 0;
}

 

 

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...