elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 37
111  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 23:35 pm
3 - Posicionarse en el último registro.  

Si tengo lo siguiente en el archivo. -

Citar
1 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
2 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
3 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
4 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
5 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
6 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
7 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
Lo que quiero es recuperar el número 7 para agregarle 1 y así tener un orden de ingreso, me podrían dar alguna idea de como intentarlo. -
Saludos.
112  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 20:43 pm
Ya lo solucione, dejo el código por si a alguien le pasa algo parecido. -


Código
  1. void reemplazar( Recordatorio *recordatorio ){
  2. char *p=NULL;
  3. if((p=strchr(recordatorio->nombre, '\n'))){
  4. *p='|';
  5. }
  6. if((p=strchr(recordatorio->direccion, '\n'))){
  7. *p='|';
  8. }
  9. if((p=strchr(recordatorio->ciudad, '\n'))){
  10. *p='|';
  11. }
  12. if((p=strchr(recordatorio->correo, '\n'))){
  13. *p='|';
  14. }
  15. if((p=strchr(recordatorio->telefono, '\n'))){
  16. *p='|';
  17. }
  18. if((p=strchr(recordatorio->celular, '\n'))){
  19. *p='|';
  20. }
  21. if((p=strchr(recordatorio->otros, '\n'))){
  22. *p='|';
  23. }
  24. }
Saludos.
113  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 19:16 pm
Hola, coterráneo.
Parece que igual toma el salto de linea '\n', me da el mismo resultado, tu código tiene 2 paréntesis de más. -
Saludos.
114  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 18:26 pm
¿Seria algo como esto?
Código
  1. fgets( recordatorio->nombre, 50, stdin );
  2.  
luego contar la cantidad de caracteres +1 y remplazar el '\0' por '|', por ej.
115  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 18:06 pm
Hola y muchas gracias a los dos.
Segunda pregunta, en la imagen se muestra como el programa guarda en un archivo (en primer lugar), pero lo que quiero es que se grabe en forma lineal, como yo lo puse a mano. -  

2 - Grabar en archivo linealmente y no en renglones.



Saludos.
116  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 16:07 pm
Muchas gracias, todo correcto, te preguntaría como se podría hacer sin utilizar memoria dinámica (me parece haberlo visto) pero como voy a encerrar el código en un bucle para que se pueda ingresar los contactos que el operador desee, me viene al pelo para no tener que hacer un array de estructuras. -
Saludos. 
117  Programación / Programación C/C++ / Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 14:51 pm
Hola, gente.
Estoy muy feliz porque llegue al capítulo archivos, muy esperado por mi porqué es lo que mas necesito aprender en c dado me dará la posibilidad de desarrollar algo que todavía no les puedo decir porque las 2 veces que lo hice en foros me criticaron mucho (mucha energía negativa). -
Como notaran en el menú el programa es un tanto ambicioso para ser el primero, pero de entrada quiero ir a fondo. -
La primer consulta es un segmentation fault que me da en la línea 78 y por supuesto hasta la 90 me podrían decir en que estoy fallando, créanme que consulté páginas, videos (incluso los 3 de Alberto) pero no hallo la solución . -

Errores/dudas/etc.

1 - Segmentation fault
2 - Grabar en archivo linealmente y no en renglones.
3 - Posicionarse en el último registro.  
4 - Salto de línea anticipado en el último campo.
5 - Leer/escribir
6 - Buscar
7 - Borrar
8 - Ordenar



Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5. int  orden;
  6. char nombre[50], direccion[50], ciudad[50], correo[50];
  7. char telefono[20], celular[20];
  8. char otros[200];
  9. }Recordatorio;
  10.  
  11. void limpiar( void );
  12. void menu( void );
  13. void agregar( void );
  14.  
  15. int main ( int argc, char **argv ){
  16.  
  17. menu();
  18.  
  19. return 0;
  20. }
  21.  
  22. void limpiar( void ){
  23. system("cls||clear");
  24. }
  25.  
  26. void menu( void ){
  27. int opc, ok, ch;
  28.  
  29. do{
  30. do{
  31. limpiar( );
  32. printf( "\n =============== Menu principal ===============\n"
  33. "\n 1 - Primero"
  34. "\n 2 - Ultimo"
  35. "\n 3 - Buscar"
  36. "\n 4 - Todos"
  37. "\n 5 - Agregar"
  38. "\n 6 - Modificar"
  39. "\n 7 - Borrar"
  40. "\n 8 - Finalizar\n"
  41. "\n ingrese opcion.....:" );
  42.  
  43. ok = scanf( "%d", &opc ) == 1 && opc > 0 && opc <= 8;
  44. while ((ch = getchar()) != EOF && ch != '\n');
  45. }while( !ok );
  46.  
  47.  
  48. switch ( opc ){
  49. case 1: printf( "\n Primero" );
  50. break;
  51. case 2: printf( "\n Ultimo" );
  52. break;
  53. case 3: printf( "\n Buscar" );
  54. break;
  55. case 4: printf( "\n Todos" );
  56. break;
  57. case 5: agregar( );
  58. break;
  59. case 6: printf( "\n Modificar" );
  60. break;
  61. case 7: printf( "\n Borrar" );
  62. break;
  63. }
  64. }while( opc != 8 );
  65.  
  66. }
  67.  
  68. void agregar( void ){
  69. Recordatorio *recordatorio = NULL;
  70. FILE *fptr = fopen ( "fichero.txt", "a" );
  71.  
  72. limpiar( );
  73.  
  74.    if( fptr == NULL ){  
  75. perror(" \n\n Error en la creacion/apertura del archivo" );
  76. }else{
  77. printf( "\n\n Ingrese NOMBRE completo del contacto........: " );
  78. fgets( recordatorio->nombre, 50, stdin );
  79. printf( "\n\n Ingrese DIRECCION del contacto..............: " );
  80. fgets( recordatorio->direccion, 50, stdin );
  81. printf( "\n\n Ingrese CIUDAD donde reside el contacto.....: " );
  82. fgets( recordatorio->ciudad, 50, stdin );
  83. printf( "\n\n Ingrese CORREO del contacto.................: " );
  84. fgets( recordatorio->correo, 50, stdin );
  85. printf( "\n\n Ingrese TELEFONO FIJO del contacto..........: " );
  86. fgets( recordatorio->telefono, 50, stdin );
  87. printf( "\n\n Ingrese CELULAR del contacto................: " );
  88. fgets( recordatorio->celular, 50, stdin );
  89. printf( "\n\n Ingrese OTROS DATOS (200 caracteres)........: " );
  90. fgets( recordatorio->otros, 50, stdin );
  91.  
  92.        fprintf(fptr, "%s", recordatorio->nombre);
  93.        fprintf(fptr, "%s", recordatorio->direccion);
  94.        fprintf(fptr, "%s", recordatorio->ciudad);
  95.        fprintf(fptr, "%s", recordatorio->correo);
  96.        fprintf(fptr, "%s", recordatorio->telefono);
  97.        fprintf(fptr, "%s", recordatorio->celular);
  98.        fprintf(fptr, "%s", recordatorio->otros);
  99.  
  100. fclose ( fptr );
  101. }    
  102. }
  103.  
Saludos.
118  Programación / Programación C/C++ / Re: [Aporte] No superar el máximo permitido por el tipo int. lenguaje C en: 24 Agosto 2016, 02:21 am
Hola.
Les dejo otro código que parece funcionar a la perfección, no me pregunten quien lo escribió porque apareció en mi disco rígido y no recuerdo de donde lo saque. -
Trate de encontrarle la lógica pero todavía no lo logro, lo único que me digo si este programa funciona sin fallas,  lo mio da vergüenza. -

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <limits.h>
  4.  
  5. int main(void){
  6. int numero = 0, c;
  7.  
  8. printf("\n\n Ingrese una numero entero (maximo permitido %u)....:", INT_MAX);
  9.  
  10. while((c = getchar()) != '\n' && c != '\r'){
  11. if(isdigit(c)){
  12. if( INT_MAX-numero*10 >= c-'0' ){
  13. numero = (numero*10) + (c-'0');
  14. }
  15. else{
  16. printf( "\n El numero ingresado supera el maximo permitido..." );
  17. numero = 0;
  18. break;
  19. }
  20. }
  21. else{
  22. printf( "\n Ingreso invalido..." );
  23. numero = 0;
  24. break;
  25. }
  26. }
  27.  
  28. printf("\n Ingreso.............:%d", numero);
  29. return 0;
  30. }

Saludos.
119  Programación / Programación C/C++ / [Aporte] No superar el máximo permitido por el tipo int. lenguaje C en: 23 Agosto 2016, 20:10 pm
Hola, dejo mi humilde aporte al foro con un tema que tiene que ver con esto. -http://foro.elhacker.net/programacion_cc/dudas_con_cola_e_intmax_lenguaje_c-t456602.0.html
Lo que valido en el programa son 4 casos que detallo a continuación y que considero que no debería fallar. -
1 - Que el ingreso no sea cero ni que el primer dígito sea cero. -
2 - Que se ingresen solo dígitos. -
3 - Que no se supere el máximo permitido de dígitos, en mi pc el máximo permitido por el int es
     2147483647 o sea 10 dígitos, si por ej. se ingresaran 11 o más se activaría el mensaje de error. -
4 - Por último si el ingreso es exactamente 10 dígitos, verifico dígito a dígito, si es menor por más
     que el resto sean todos nueves el ingreso es correcto, si por el contrario es mayor por más que el
     resto sean todos ceros el ingreso es incorrecto y si es igual continuo con el siguiente. -
Por último, espero 2 cosas, la primera que me den sugerencia para poder mejorarlo y la segunda es que me gustaría ver la versión de algunos de los expertos del foro, no para competir ya que no puedo todavía darme ese lujo, sino simplemente para que nos beneficiemos los que estamos estudiando el lenguaje. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <limits.h>
  5. #include <ctype.h>
  6.  
  7. void valIngInt( void );
  8. void limpiar( void );
  9. int valFinal( char charIngreso[], char charIntMax[] );
  10. void mensaje( int men );
  11.  
  12. int main( void ){
  13.  
  14. valIngInt();
  15.  
  16. return 0;
  17. }
  18.  
  19. void valIngInt( void ){
  20. int i, ok, cantDigInt, men, numero;
  21. char charIntMax[20], charIngreso[11],aux;
  22.  
  23. cantDigInt = sprintf(charIntMax, "%d", INT_MAX);
  24.  
  25. do{
  26. limpiar( );
  27.  
  28. ok=1, i=0;
  29. printf( "\n Ingrese un numero entero ( mayor a 0 e igual o menor a %d )\n .....:" , INT_MAX);
  30. while ((aux = getchar()) != EOF && aux != '\n'){
  31. if( isdigit(aux) ){
  32. if( i == 0 && aux == '0'){
  33. ok=0;
  34. men = 1;
  35. mensaje( men );
  36. break;
  37. }
  38. charIngreso[i] = aux;
  39. }
  40. else{
  41. ok=0;
  42. men = 2;
  43. mensaje( men );
  44. break;
  45. }
  46. i++;
  47. if( i > cantDigInt ){
  48. ok=0;
  49. men = 3;
  50. mensaje( men );
  51. break;
  52. }
  53. }
  54. charIngreso[i] = '\0';
  55.  
  56. if( i ==  cantDigInt){
  57. ok = valFinal( charIngreso, charIntMax );
  58. if( ok == 0 ){
  59. men = 4;
  60. mensaje( men );
  61. }
  62. }
  63. }while( !ok );
  64. numero = atoi(charIngreso);
  65. printf( "\n Ingreso.....: %d", numero );
  66. }
  67.  
  68. void limpiar( void ){
  69. system("cls||clear");
  70. }
  71.  
  72. int valFinal( char charIngreso[], char charIntMax[] ){
  73. size_t i = 0, ok=1;
  74.  
  75. while( charIngreso[i] != '\0' ){
  76. if(charIngreso[i] > charIntMax[i]){
  77. ok = 0;
  78. break;
  79. }else if( charIngreso[i] < charIntMax[i] ){
  80. break;
  81. }
  82. i++;
  83. }
  84.  
  85. return ok;
  86. }
  87.  
  88. void mensaje( int men ){
  89. int ch;
  90.  
  91. if( men == 1 || men == 2 || men == 3 ){
  92. while ((ch = getchar()) != EOF && ch != '\n');
  93. }
  94.  
  95. if( men == 1 ){
  96. printf( "\n El ingreso es incorrecto, el primer digito no puede ser cero\n\n\t");
  97. }else if( men == 2 ){
  98. printf( "\n El ingreso es incorrecto, debe ingresar solo digitos del 0 al 9 \n\n\t" );
  99. }
  100. else if( men == 3 ){
  101. printf( "\n El ingreso es incorrecto, supera el maximo permitido ==> %d \n\n\t" , INT_MAX );
  102. }
  103. else{
  104. printf( "\n El ingreso es incorrecto, supera el maximo permitido ==> %d \n\n\t" , INT_MAX );
  105. }
  106.  
  107. printf( "Pulse una tecla para intentarlo nuevamente..." ); getchar();
  108. }

Un gran saludo para todos.
120  Programación / Programación C/C++ / Re: Dudas con cola e INT_MAX lenguaje C. en: 22 Agosto 2016, 18:33 pm
Hola.
Evidentemente, no estaba tan mal enfocado. -
Citar
Para liberar la memoria, no basta con asignarle un NULL, primero tienes que liberar la memoria con la función free, donde su único parámetro es el puntero que apunta a un bloque de memoria dinámica (un bloque creado con malloc, calloc o realloc).
debo aclararte en cuanto a esto que lo hago de esta manera para poder continuar con el programa, si se desea se puede nuevamente agregar nodos (en el caso de que el quitado sea el único). - 

Un abrazo.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 37
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines