[C con Clase] Código para hacer un RFC

Juan jmicanovelles en gmail.com
Vie Oct 10 21:27:06 CEST 2008


Hola David:
dia[2] no, no... dia[3], dos digitos para los dias del 1 al 31 y un digito para cerrar la cadena.
mes[2] no, no... idem que el anterior, mes[3] es lo correcto.
anno[4] no, no... anno[5], reservamos espacio para cerrar. 
Cuando introduzcas datos, introduce dos digitos, o sea que si son dias inferiores a diez, deberás introducir 01, 02, 03 etc, de otra manera cierras la cadena en tu función.   
RFC[10] no, no... el mismo fallo...REF[11] y en la función REF[10]='\0'; para cerrar la cadena.
Con eso ya funciona.
Hay alguna cosilla, que no influye... <string.h> no lo usas, aunque en c las librerias estandar, si no las incluyes, tambien funciona, ahí yo no entiendo mucho del tema.
Para la espera, puedes usar getchar();
o system("pause"), esta función es de stdlib.h .
En la función para buscar la vocal, si introducieras un nombre con muchas consonantes, que se pudiera dar el caso, con los nombres alemanes o de otro pais nórdico, quizá pudiera pasar, no devuelve nada, bueno parece ser que por defecto devuelve el primer char del argumento que has pasado, cosa de compiladores, supongo, ahí si que alguien que entienda, nos lo podría explicar.
Espero que alguno se lance, y si no, pues ya está.
Venga, nos vemos..
Juan








El pasado 2008-10-10 03:24:35, David Reza escribió:
 
DR> Hola a todos, un comáñero tiene un código para hacer un RFC, le ayudé a
DR> hacerlo y no le veo ningún problema pero simplemente no funciona como nos
DR> gustaría que fuera. Aquí les dejo el código para que lo chequen y si
DR> encuentran algún error me lo puedan hacer saber. El código está en C, y el
DR> problema es que poniendo mis datos, sólo me salen las primeras 2 letras del
DR> RFC.
DR> #include<stdio.h>
DR> #include<string.h>
DR> void FRFC(char *nombre, char *appaterno, char *apmaterno, char *dia, char
DR> *mes, char *ano);
DR> char FEsvocal(char *appaterno);
DR> int main(void){
DR>     char nombre[11],appaterno[11],apmaterno[11],dia[2],mes[2],ano[4],*vocal;
DR>     printf("Nombre: ");
DR>     scanf("%s",nombre);
DR>     printf("Apellido paterno: ");
DR>     scanf("%s",appaterno);
DR>     printf("Apellido materno: ");
DR>     scanf("%s",apmaterno);
DR>     printf("Dia: ");
DR>     scanf("%s",dia);
DR>     printf("Mes: ");
DR>     scanf("%s",mes);
DR>     printf("Ano: ");
DR>     scanf("%s",ano);
DR>     FRFC(nombre, appaterno, apmaterno, dia, mes, ano);
DR>     scanf("%s", ano);  /* Esto lo puse solamente para detener la ejecución
DR> en la consola. No sé mucho de C y no sé cuál es el equivalente al
DR> 'cin.ignore()' de C++ */
DR>     return 0;
DR> }
DR> void FRFC(char *nombre, char *appaterno, char *apmaterno, char *dia, char
DR> *mes, char *ano){
DR>     char RFC[10];
DR>     RFC[0] = appaterno[0];
DR>     RFC[1] = FEsvocal(appaterno);
DR>     RFC[2] = apmaterno[0];  /* Si aquí le pongo 'apmaterno[1]' sí me muestra
DR> el caracter correspondiente, pero así como está no muestra nada */
DR>     RFC[3] = nombre[0];
DR>     RFC[4] = ano[2];
DR>     RFC[5] = ano[3];
DR>     RFC[6] = mes[0];
DR>     RFC[7] = mes[1];
DR>     RFC[8] = dia[0];
DR>     RFC[9] = dia[1];
DR>     printf("\nTu RFC es: %s", RFC);
DR>     /* Aquí mando a imprimir dentro de la función porque sinceramente no sé
DR> cómo devolver todo el arreglo y así poder imprimirlo en 'main()'. Sé que
DR> podría pasarle otro puntero a la función y modificar ese puntero y usarlo
DR> desde 'main()' pero como mi amigo no ha visto ese tema pues no quiero
DR> confundirlo */
DR> }
DR> char FEsvocal(char *appaterno){
DR>     char vocal;
DR>     int k;
DR>     for(k=1;k<=3;k++){
DR>         switch(appaterno[k]){
DR>                 case 'a':
DR>                 case 'e':
DR>                 case 'i':
DR>                 case 'o':
DR>                 case 'u':
DR>                 case 'A':
DR>                 case 'E':
DR>                 case 'I':
DR>                 case 'O':
DR>                 case 'U': return appaterno[k];
DR>         }
DR>     }
DR> }
DR> Gracias de antemano.
DR> _______________________________________________
DR> Lista de correo Cconclase Cconclase en listas.conclase.net
DR> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
DR> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Más información sobre la lista de distribución Cconclase