Hola buenas,
Soy nuevo en el foro y tenía un problemilla con un programa.
Tengo dos archivos, el primero donde esta el main y el otro donde tengo el archivo con el texto que me tiene que leer, en este caso son DNI. El problema viene cuando quieres meter el DNI y no te reconoce lo que hay dentro del archivo, además quiero que cuando meta el DNI si no está en el texto del archivo DNIList.txt que lo añada. Os dejo por aquí el código a ver si podéis ver algo que este mal o si me podéis echar un cable .
También podéis ver que para que lleve a abrir el archivo DNIList se comprueba que el DNI tenga un formato correcto.
Y este es el fichero DNIList (Los DNI son inventados )
Muchísimas gracias
Soy nuevo en el foro y tenía un problemilla con un programa.
Tengo dos archivos, el primero donde esta el main y el otro donde tengo el archivo con el texto que me tiene que leer, en este caso son DNI. El problema viene cuando quieres meter el DNI y no te reconoce lo que hay dentro del archivo, además quiero que cuando meta el DNI si no está en el texto del archivo DNIList.txt que lo añada. Os dejo por aquí el código a ver si podéis ver algo que este mal o si me podéis echar un cable .
También podéis ver que para que lleve a abrir el archivo DNIList se comprueba que el DNI tenga un formato correcto.
CitarCódigo (c) [Seleccionar]#include <stdio.h>
#include <stdlib.h>
#define MAXID 16 /* Per fer-ho interessant, s'ha ampliat a 16. JAJAJAJA que majos */
#define IDLEN 9
char IDtable[MAXID][IDLEN+1]; /* Conté la llista d'autoritzats. */
int IDtableLen; /* Quantitat de números d'identitat a IDtable. */
int IDtableLoad( char DNI[] )
{
FILE *fptr;
char mot[BUFSIZ];
int i;
fptr = fopen( "DNIList.txt", "rt" );
if( fptr != NULL ) {
i = 0;
fscanf( fptr, " %s", mot );
while( !feof( fptr ) ) {
//if() {
//i = crida a la funció de guardar-lo a la taula;
//} /* if */
fscanf( fptr, " %s", mot );
} /* while */
fclose( fptr );
} else {
i = -1;
} /* if */
return i;
} /* IDtableLoad */
char DNI[10];
int validacioDNI (char DNI[10]);
int DNInum;
int res = 0;
validacioDNI (char DNI[10])
{
char restalletra[23];
int fin = 0;
int digit;
int lletra;
int i = 0;
int resta;
int validacio = 0;
int DNIincomplet = 0;
if (DNI[9] != '\0')
{
printf ("Tamany incorrecte");
validacio = 1;
};
while (i < 9 && DNIincomplet == 0)
{
if (DNI[i] == NULL)
{
DNIincomplet = 1;
printf ("Tamany incorrecte");
validacio = 1;
}
i = i +1;
};
i = 0;
while ( i <8 && digit != 0 )
{
digit = isdigit( DNI[i] );
i = i+1;
};
if (digit == 0 && validacio == 0)
{
validacio = 1;
};
lletra = isalpha( DNI[8] );
if (lletra == 0 && validacio == 0)
{
validacio = 1;
};
DNInum = ((DNI [0] - '0')*10000000) +((DNI [1] - '0')*1000000) +((DNI [2] - '0')*100000) +((DNI [3] - '0')*10000) +((DNI [4] - '0')*1000) +((DNI [5] - '0')*100)
+ ((DNI [6] - '0')*10) + ((DNI [7] - '0'));
restalletra[0] = 'T';
restalletra[1] = 'R';
restalletra[2] = 'W';
restalletra[3] = 'A';
restalletra[4] = 'G';
restalletra[5] = 'M';
restalletra[6] = 'Y';
restalletra[7] = 'F';
restalletra[8] = 'P';
restalletra[9] = 'D';
restalletra[10] = 'X';
restalletra[11] = 'B';
restalletra[12] = 'N';
restalletra[13] = 'J';
restalletra[14] = 'Z';
restalletra[15] = 'S';
restalletra[16] = 'Q';
restalletra[17] = 'V';
restalletra[18] = 'H';
restalletra[19] = 'L';
restalletra[20] = 'C';
restalletra[21] = 'K';
restalletra[22] = 'E';
resta = DNInum % 23;
if (validacio == 0){
if (restalletra[resta] != DNI[8] )
{
validacio = 1;
printf ("Lletra incorrecte");
};
};
i= 0;
return validacio;
};
int main()
{
printf ("Introdueix DNI: ");
scanf ("%s", &DNI);
res = validacioDNI (DNI);
if (res == 0)
{
printf ("\nDNI correcte, ara obrirem el fitxer amb la base de dades \n");
//Aqui mandariamos algo a la primera funcion
res=IDtableLoad(DNI);
if(res==-1){
printf("El DNI no es al fitxer.");
}else{
printf("El DNI es al fitxer");
}
};
if (res == 1)
{
printf ("\nDNI incorrecte");
};
return 0;
}
Y este es el fichero DNIList (Los DNI son inventados )
Citar
94025635W
84220350P
40103636P
Z0893943F
65292343N
42972192G
X7942365M
Y9872602G
11622852D
71438118A
Y0884005Z
X0652947T
24901532F
19910859N
67501492B
50482351L
Muchísimas gracias