UTNianos

Versión completa: [Problema con codigo en C] Algoritmo de Luhn
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Me tira un error muy grosero...
Les diría cual pero es el clasico: te cuelgo la pc y te tiro error de memoria y anda a llorar a la iglesia =(


#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

#define MAX 16
#define cantidadDigitos 16

int validarluhn(char *tarjetaNum);

int main(void){

int terminar=1;
int flag;
char *tarjetaNum;

printf("Usted va a probar el nuevo sistema de seguridad\r\n");

do{
printf("Ingrese la contraseña (16 digitos)\r\n");
fgets(tarjetaNum,MAX+1,stdin);
getchar();
flag = validarluhn(tarjetaNum);

}while(flag=0);

getch();
return(0);
}

int validarluhn(char *tarjetaNum){

int suma=0;
char digito;
int i;
int validacion;

for(i=0; i< cantidadDigitos; i++){
digito = tarjetaNum[i] - '0';
if((i%2)==0) {
digito = digito*2;
if (digito >= 10) {
digito = digito - 10 + 1;
}
}
suma += digito;
}
if(suma%10==0){
validacion = 1;
puts("Valor de tarjeta correcto\r\n");
}
else{
validacion = 0;
puts("Valor de tarjeta incorrecto\r\n");
}
return(validacion);
}




No se que puede ser-.-'
Solamente estoy probando la funcionConfused[/quote]
estas poniendo en tarjetaNum los caracteres a pesar de que nunca le asignaste memoria.
Supogno que nunca vas a leer mas de 16 caracteres por lo que lo mas simple seria hacerlo un array estatico de 16 caracteres.

Bah, no acostumbro usar esto, pero supongo que fgets no te reserva la memoria no?
se eso q dice bruno, hacele malloc
Yo haría un array también.. Nomás le pusiste que es un puntero a char; no sé, no me hace muy feliz eso. Si estás limitando a 16, yo le mandaría un array, y fue.
isaaaaaaaaaaaaaaaaaaaaaaaa
Ahí anduvo =D

Le agregué: tarjetaNum = malloc(sizeof(char));
Gracias!=D, se suponía que en el programa entero yo ya mando el vector creado...-.-'
Sigue estando mal y te va a fallar de forma random.
Eso serviria si la contraseña fuera de un solo char.
Vos queres que sea de MAX+1
Igual si no va a ser dinamico ese tamaño no te conviene hacerlo asi, sino que tarjeta num sea un char[MAX+1] y no meterte con memoria dinamica.
Tendrias que tener en cuenta si esta bien desechar todo lo que este dsp de los 16 caracteres si el tipo pone de mas.
char *tarjetaNum[MAX+1]; (?)
Si le pones el tamaño entre corchetes el puntero esta de mas.
Gracias por la reputacion positiva Feer.
char *tarjeta = malloc (1000) ; nunca falla
(24-07-2011 15:18)brunodiaz escribió: [ -> ]Si le pones el tamaño entre corchetes el puntero esta de mas.
Gracias por la reputacion positiva Feer.

(24-07-2011 15:22)lucho6 escribió: [ -> ]char *tarjeta = malloc (1000) ; nunca falla

Gracias=D=D=D
Voy a ver si con tiempo me armbo algunas funciones para encriptar y para estas validaciones:b
Aunque después no me sirvan para mucho (en electrónica) ajaja
URLs de referencia