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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15
31  Programación / Programación C/C++ / Re: Grabar estructura en archivo [lenguaje C] [Windows 7] en: 10 Marzo 2015, 22:28 pm
Hola BloodSharp.
Si te toparas en un caso como el mío me podrías decir como lo solucionarías, el caso es que estoy buscando desde que ivancea96 me sugirió serealizar los campos de la estructura y no encuentro ni un mísero ej. o por lo menos al alcance de mis conocimientos, espero puedas(an) ayudarme.

Saludos.
Daniel
32  Programación / Programación C/C++ / Re: Grabar estructura en archivo [lenguaje C] [Windows 7] en: 9 Marzo 2015, 20:43 pm
Hola.
ivancea96, como conozco que no te gusta demasiado poner código no te voy a pedir que lo hagas, como siempre y seguramente la tuya es una muy buena solución, me voy a documentar sobre
Citar
“Basta hacer una función que serialice la estructura. Sean 1, 2 o 10 campos, la función no se va a alargar, no hay razón para evitarla.”
, no tengo conocimientos sobre el particular.-
BloodSharp,  voy a practicar con la función que propones.-
Gracias a los 2 por el tiempo.-

Saludos.
Daniel
33  Programación / Programación C/C++ / Grabar estructura en archivo [lenguaje C] [Windows 7] en: 9 Marzo 2015, 18:41 pm
Hola gente.
Nuevamente con dudas que no logro resolver con el manual ni con consultas en la web (con este último tal vez lo lograría pero nunca encuentro cosas tan avanzadas como las de este foro, gracias al gran conocimiento de los que responden).-
Mi consulta es, la única manera de grabar los datos en disco es con fprintf y detallando uno por uno los campos de la estructura o hay alguna manera de hacerlo  más conciso,  realmente ¿si la estructura tiene 20 campos hay que detallarlo uno por uno?- 
Por último si alguien tiene mucho tiempo y desea darme alguna sugerencia para mejorar el código, Danielito agradecido.-


Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <string.h>
  4.  
  5. typedef struct{
  6. int orden;
  7. char nombre[30];
  8. char apellido[30];
  9. char direccion[30];
  10. int numCalle;
  11. char ciudad[30];
  12. char provincia[30];
  13. }Cliente;
  14.  
  15. void mosDtos(Cliente *ptrCliente);
  16. void ingDtos(Cliente *ptrCliente);
  17. void opciones(Cliente *ptrCliente);
  18. void graDtos(Cliente *ptrCliente);
  19.  
  20. int main(void){
  21. FILE *ptrCte;
  22. Cliente datos  = {0, "\0", "\0", "\0", 0, "\0", "\0"};
  23.  
  24. if(( ptrCte = fopen( "archivo.txt", "w" )) == NULL ){
  25. perror(" archivo.txt ");
  26. }
  27. else{
  28. ingDtos(&datos);
  29. fclose(ptrCte);
  30. }
  31.  
  32. return 0;
  33. }
  34.  
  35. void mosDtos(Cliente *ptrCliente){
  36. system("cls");
  37.  
  38. printf("\n\n == Introduzca datos del cliente \"Ningun campo puede permanecer vacio\" ==");
  39. printf( "\n\n =========================================================================\n" );
  40. printf("\n Orden...............: %d", ptrCliente->orden);
  41. printf("\n Nombre..............: %s", ptrCliente->nombre);
  42. printf("\n Apellido............: %s", ptrCliente->apellido);
  43. printf("\n Direccion...........: %s", ptrCliente->direccion);
  44. printf("\n Altura de la calle..: %d", ptrCliente->numCalle);
  45. printf("\n Ciudad..............: %s", ptrCliente->ciudad);
  46. printf("\n Provincia...........: %s", ptrCliente->provincia);
  47. printf( "\n\n =========================================================================\n" );
  48. }
  49.  
  50. void ingDtos(Cliente *ptrCliente){
  51. int ok, ch;
  52. char *p = NULL;
  53.  
  54. do{
  55. mosDtos(ptrCliente);
  56. printf("\n Orden...............: ");
  57. ok = scanf("%d", &ptrCliente->orden) == 1 && ptrCliente->orden >= 1;
  58. while ((ch = getchar()) != EOF && ch != '\n');
  59. }while(!ok);
  60.  
  61. do{
  62. mosDtos(ptrCliente);
  63. printf("\n Nombre..............: ");
  64. fgets(ptrCliente->nombre, 30, stdin);
  65. if((p=strchr(ptrCliente->nombre, '\n'))){
  66. *p='\0';
  67. }
  68. else{
  69. while((ch = getchar()) !='\n' && ch!=EOF);
  70. }
  71. ok = strlen(ptrCliente->nombre);
  72. }while(!ok);
  73.  
  74. do{
  75. mosDtos(ptrCliente);
  76. printf("\n Apellido............: ");
  77. fgets(ptrCliente->apellido, 30, stdin);
  78. if((p=strchr(ptrCliente->apellido, '\n'))){
  79. *p='\0';
  80. }
  81. else{
  82. while((ch = getchar()) !='\n' && ch!=EOF);
  83. }
  84. ok = strlen(ptrCliente->apellido);
  85. }while(!ok);
  86.  
  87. do{
  88. mosDtos(ptrCliente);
  89. printf("\n Direccion...........: ");
  90. fgets(ptrCliente->direccion, 30, stdin);
  91. if((p=strchr(ptrCliente->direccion, '\n'))){
  92. *p='\0';
  93. }
  94. else{
  95. while((ch = getchar()) !='\n' && ch!=EOF);
  96. }
  97. ok = strlen(ptrCliente->direccion);
  98. }while(!ok);
  99.  
  100. do{
  101. mosDtos(ptrCliente);
  102. printf("\n Altura de la calle..: ");
  103. ok = scanf( "%d", &ptrCliente->numCalle ) == 1 && ptrCliente->numCalle >= 1;
  104. while ((ch = getchar()) != EOF && ch != '\n');
  105. }while(!ok);
  106.  
  107. do{
  108. mosDtos(ptrCliente);
  109. printf("\n Ciudad..............: ");
  110. fgets(ptrCliente->ciudad, 30, stdin);
  111. if((p=strchr(ptrCliente->ciudad, '\n'))){
  112. *p='\0';
  113. }
  114. else{
  115. while((ch = getchar()) !='\n' && ch!=EOF);
  116. }
  117. ok = strlen(ptrCliente->ciudad);
  118. }while(!ok);
  119.  
  120. do{
  121. mosDtos(ptrCliente);
  122. printf("\n Provincia...........: ");
  123. fgets(ptrCliente->provincia, 30, stdin);
  124. if((p=strchr(ptrCliente->provincia, '\n'))){
  125. *p='\0';
  126. }
  127. else{
  128. while((ch = getchar()) !='\n' && ch!=EOF);
  129. }
  130. ok = strlen(ptrCliente->provincia);
  131. }while(!ok);
  132. mosDtos(ptrCliente);
  133.  
  134. opciones(ptrCliente);
  135. }
  136.  
  137. void opciones(Cliente *ptrCliente){
  138. int opcion, ok;
  139. char ch;
  140.  
  141. do{
  142. mosDtos(ptrCliente);
  143. printf("\n ========= Opciones =========");
  144. printf("\n 1 - Grabar en disco.");
  145. printf("\n 2 - Introducir nuevamente los datos.");
  146. printf("\n 3 - Finalizar.");
  147.  
  148. printf("\n\n Ingrece opci%cn....: ", 162);
  149. ok = scanf("%d", &opcion) == 1 && opcion >= 1 && opcion <= 3;
  150. while ((ch = getchar()) != EOF && ch != '\n');
  151. }while(!ok);
  152.  
  153. if(opcion == 1){
  154. graDtos(ptrCliente);
  155. }
  156. else if(opcion == 2){
  157. ptrCliente->orden = 0;
  158. strcpy(ptrCliente->nombre, "\0");
  159. strcpy(ptrCliente->apellido, "\0");
  160. strcpy(ptrCliente->direccion, "\0");
  161. ptrCliente->numCalle = 0;
  162. strcpy(ptrCliente->ciudad, "\0");
  163. strcpy(ptrCliente->provincia, "\0");
  164.  
  165. mosDtos(ptrCliente);
  166. ingDtos(ptrCliente);
  167. }
  168.  
  169. }
  170.  
  171. void graDtos(Cliente *ptrCliente){
  172.  
  173. }
  174.  
  175.  

Una cosita más, no desconozco que las validaciones no son del todo eficiente, pero eso lo soluciono luego.-

Saludos y gracias por el tiempo.
Daniel
34  Programación / Programación C/C++ / Re: Duplicar un archivo de texto plano con lenguaje C. en: 5 Marzo 2015, 03:44 am
Hola a todos.
rir3760 créeme que desde que pusiste tu último post y hasta este momento que son las 23.36 (Argentina) que estuve buscando casi sin cesar que significaba el == 3 que parece tener relación con el bucle while pero no logro encontrar la explicación, ni siquiera el archivo tiene 3 renglones de 3 campo cada uno (tiene 2), ¿me lo podrías aclarar ?.- :huh: :huh: :huh: 

Saludos y gracias por tú tiempo.
Daniel
35  Programación / Programación C/C++ / Re: Duplicar un archivo de texto plano con lenguaje C. en: 4 Marzo 2015, 15:30 pm
Hola.
angel lex, no te respondí porque me pareció que estaba muy claro cuál era mi consulta.-
rir3760, te dejo un programita que arme con datos obtenidos en la web porque me pareció interesante para leer un archivo como el siguiente:

campo1:2:campo3
campo4:5:campo6


Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. char campoUno[100], campoTres[100];
  5. int campoDos = 0;
  6.  
  7. FILE *ptrBdd = fopen("datos.txt", "r");
  8. if( ptrBdd == NULL){
  9. printf( "\n\n Error al intentar abrir archivo..." );
  10. }
  11. else{
  12. while( !feof(ptrBdd) ){
  13. fscanf( ptrBdd, "%[a-z0-9]:%d:%[a-z0-9]\n", campoUno, &campoDos, campoTres );
  14. printf( "%s %d %s\n", campoUno, campoDos, campoTres);
  15. }
  16. fclose(ptrBdd);
  17. }
  18.  
  19.  
  20. return 0;
  21. }
  22.  

La consulta es. ¿es correcto poner el cierre del archivo dentro del else? ¿ o tengo que cerrarlo con el condicional if?

Saludos.
Daniel
36  Programación / Programación C/C++ / Duplicar un archivo de texto plano con lenguaje C. en: 3 Marzo 2015, 17:22 pm
Hola gente.
La lógica es que consultemos cuando un programa no funciona por algún error de sintaxis o lógica, en este caso es algo distinto porque como algunos conocen por mi edad no tengo otra posibilidad de consulta que no sean los foros.-
El caso es, alguien me puede decir si esta es una manera correcta de duplicar un archivo, me refiero a fgets y fputs, con estas 2 funciones tengo la seguridad de que no voy a tener problema para leer y escribir contenga lo que contenga un archivo con texto plano ?.- 

Código
  1. /* Programa para copiar un archivo en otro*/
  2. #include <stdio.h>
  3.  
  4. int main(){
  5. char temp[100];
  6. FILE *ptrOrigen = fopen( "cliente.txt", "r");
  7. FILE *ptrCopia  = fopen( "clienteCopia", "w");
  8.  
  9. if( ptrOrigen == NULL || ptrCopia == NULL ){
  10. printf(" \n\n Error al abrir ficheros... ");
  11. }
  12. else{
  13. printf( "\n Se muestra el archivo copiado...\n\n" );
  14. while( fgets( temp, 100, ptrOrigen) ){
  15. fputs( temp, ptrCopia );
  16. printf( " %s", temp );
  17. }
  18. }
  19.  
  20. fclose(ptrOrigen);
  21. fclose(ptrCopia);
  22.  
  23. return 0;
  24. }
  25.  

Desde ya muchas gracias por la ayuda que deseen brindarme.-
Saludos.
Daniel
37  Programación / Programación C/C++ / Re: Empacar dos caracteres en una variable entera unsigned. [C] en: 23 Febrero 2015, 22:08 pm
Hola crack81.
Te dejo la imagen de la tapa.-



Saludos.
Daniel
38  Programación / Programación C/C++ / Re: Empacar dos caracteres en una variable entera unsigned. [C] en: 23 Febrero 2015, 21:38 pm
Hola.
engel lex, me ocurrió algo inusual con tu respuesta, cuando la leí por primera vez tenía unos ej. Que luego (de ver el partido de la selección Argentina) desaparecieron y me apareció mi post modificado (por vos) y realmente no le encuentro diferencia con el original.
rir3760, ¿me podrías decir si mi programa tiene que ver con el enunciado?  .-
Tan sólo me faltaría que alguien me diga en la práctica, ¿de qué forma se puede aplicar el empaquetado de caracteres?.-
Gracias a todos por el tiempo.-

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. void empacaCaracteres(char a, char b);
  5.  
  6. int main(void){
  7. unsigned char a = 'r', b = 'd';
  8. empacaCaracteres(a, b);
  9.  
  10. return 0;
  11. }
  12.  
  13. void empacaCaracteres(char a, char b){
  14. unsigned int v = a << CHAR_BIT | b;
  15. unsigned bits = 1U << (sizeof(unsigned) * CHAR_BIT - 1), sep=0;
  16.  
  17. printf("\n\n");
  18. while(bits){
  19. printf(sep %8 == 0 ? " " : "");
  20. printf(v & bits ? "1" : "0");
  21. sep++;
  22. bits /=2;
  23. }
  24. }

Saludos.
Daniel
39  Programación / Programación C/C++ / Empacar dos caracteres en una variable entera unsigned. [C] en: 22 Febrero 2015, 20:10 pm
Hola a todos.
Creo que es la primera vez que los consulto y no puedo mostrar ningún avance, bueno debo aclarar que estoy desconcertado y no sé por dónde comenzar y les soy sincero al decir que ni siquiera pude buscar en la web.-
Dejo el enunciado y espero que puedan ayudarme con teoría o con algún ej.-    



Saludos.
Daniel
40  Programación / Programación C/C++ / Re: Establecer el estado de un determinado bit Encendido/Apagado [C] en: 17 Febrero 2015, 02:11 am
Hola.
Patilanz, gracias por la ayuda, no pude aplicar tú código porque en ese momento estaba ocupado y al consultar el foro encontré lo de Blaster y me saltee el tuyo.-
Blaster, gracias amigo funciona a la perfección, casi te consulto porque para mí el bits más a la derecha empezaba en uno y parece que comienza en cero.-

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. int pos = 0, mask = 1, numero = 312, i;
  5.  
  6. printf("\n\n 312 ==> 100111000\n\n");
  7. for(i=0; i<9; i++){
  8. mask = 1 << pos;
  9. if(numero & mask)
  10. printf("\n bit %d ==> Encendido", i);
  11. else
  12. printf("\n bit %d ==> Apagado", i);
  13. pos++;
  14. }
  15. return 0;
  16. }



Saludos.
Daniel
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines