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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: [1] 2 3 4
1  Programación / Scripting / Error al querer leer el último registro en archivo .txt [python] en: 25 Marzo 2018, 23:42 pm
Hola, ¿cómo están?
Créame que lo intente de muchas maneras y no encuentro enmendar el error. -
Tengo un archivo de texto que contiene lo siguiente:
1  123
2  345
3  567
4  789
Tengo que establecer el próximo código que sí o si tiene que ser 5, no puedo contar las líneas porque
el programa tiene la posibilidad de borrar una línea:
1  123
2  345
4  789
Si cuento las lineas el código seria 3+1=4 y el 4 estaría repetido cosa que no puede ocurrir porque lo
utilizo para la búsqueda. -
Lo que ocurre es que si tengo más de una línea el programa funciona correctamente, pero si tengo un
Solo registro me da error, tmp aparece vacío. -

Esta es la función:
Código
  1. def establecer_codigo():
  2.    archivo = abrir_lectura()
  3.    tmp = archivo.readlines()[-1]
  4.    tmp = tmp.split()
  5.    codigo = int(tmp[0])
  6.    archivo.close()
  7.  
  8.    return codigo

Saludos.
Daniel
2  Programación / Programación C/C++ / Return en recursividad(Lenguaje C) en: 28 Octubre 2015, 18:48 pm
Hola, gente.
Como el enunciado lo dice tengo algunas dudas sobre el tema recursividad.-
Cuando pongo esta línea de código return num[e]; quisiera saber que mensaje le está enviando el programa a la pila o porque debo suponer que con esto la función deja de auto llamarse.- 
Por último ¿me podrían dar alguna sugerencia para mejorarlo?

Código
  1. #include <stdio.h>
  2.  
  3. int rec( int[], int );
  4.  
  5. int main(void){
  6. int numeros[] = {1,2,3,4,5,6}, e = sizeof numeros / sizeof *numeros, i;
  7.  
  8. for( i = 0; i < e; i++ ){
  9. printf( "%d ", numeros[i] );
  10. }
  11. printf( "\n" );
  12.  
  13. rec( numeros, e );
  14.  
  15. return 0;
  16. }
  17.  
  18. int rec( int num[], int e){
  19. if( e == 0){
  20. return num[e];
  21. }
  22. else{
  23. printf( "%d ", num[e-1] );
  24. rec( num, e-1 );
  25. }
  26. return 0;
  27. }
  28.  
Saludos y muchas gracias.-
Daniel 
3  Programación / Programación C/C++ / Liberar memoria en listas simplemente enlazada [C] en: 26 Junio 2015, 22:01 pm
Hola gente.
Los molesto porque estoy estudiando listas simples enlazadas, créanme que nunca un tema de c me cuesta tanto entenderlo, el caso es que encontré un video con este código y me pareció sencillo para ver si de una vez por todas  entiendo estas venditas listas.-
La pregunta es ¿debo liberar memoria reservada con malloc?.-

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5. struct nodo* siguiente;
  6. char* nombre;
  7. } nodo;
  8.  
  9. nodo* primer = NULL;
  10. nodo* ultimo = NULL;
  11.  
  12. void agregar(nodo* _nodo){
  13. _nodo -> siguiente = NULL;
  14. if(primer == NULL){
  15. primer = _nodo;
  16. ultimo = _nodo;
  17. }else{
  18. ultimo -> siguiente = _nodo;
  19. ultimo = _nodo;
  20. }
  21. }
  22.  
  23. int main(){
  24. nodo* primerNodo = malloc(sizeof(nodo));
  25. primerNodo -> nombre = "Primer Elemento";
  26. nodo* segundoNodo = malloc(sizeof(nodo));
  27. segundoNodo -> nombre = "Segundo Elemento";
  28. nodo* tercerNodo = malloc(sizeof(nodo));
  29. tercerNodo -> nombre = "Tercer Elemento";
  30.  
  31. agregar(primerNodo);
  32. agregar(segundoNodo);
  33. agregar(tercerNodo);
  34. nodo* i = primerNodo;
  35. while(i != NULL){
  36. printf("%s\n", i -> nombre);
  37. i = i -> siguiente;
  38. }
  39. return 0;
  40. }


Desde ya muchas gracias.-

Saludos.
Daniel
4  Programación / Programación C/C++ / Lista enlazada simple – listas ligadas [C] en: 9 Junio 2015, 02:12 am
Hola gente.
Como verán estoy tratando de interpretar las listas ligadas y les aseguro que en 10 días tan sólo pude construir este pequeño programa, lo que me falta saber que es más conveniente, declarar las variables estructura cómo globales o dentro la función principal y pasarlas como parámetro a las funciones.-
Por último necesitaría que alguien me ayude a construir la función borrar_elemento, no pude poner ninguna línea.-

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. struct _agenda{
  6. char nombre[30];
  7. char telefono[12];
  8. struct _agenda *siguiente;
  9. };
  10.  
  11. struct _agenda *primero, *ultimo;
  12.  
  13. void mostrar_menu();
  14. void agregar_elemento();
  15. void mostrar_lista();
  16.  
  17. int main(void){
  18. char opcion, ch;
  19.  
  20. primero = (struct _agenda *) NULL;
  21. ultimo = (struct _agenda *) NULL;
  22. do{
  23. mostrar_menu();
  24. opcion = getchar();
  25. while((ch = getchar()) != EOF && ch != '\n');
  26. switch ( opcion ){
  27. case '1': agregar_elemento();
  28. break;
  29. case '2':  printf("No disponible todavía!\n");
  30. break;
  31. case '3': mostrar_lista(primero);
  32. break;
  33. case '4': exit( 1 );
  34. default: printf( "Opción no válida\n" );
  35. break;
  36. }
  37. } while (opcion!='4');
  38.  
  39. return 0;
  40. }
  41.  
  42. void mostrar_menu(){
  43. system( "CLS" );
  44. printf( "\n\n ===== Menu =====" );
  45. printf( "\n 1 - Agregar elemento" );
  46. printf( "\n 2 - Borrar elemento" );
  47. printf( "\n 3 - Mostrar elementos" );
  48. printf( "\n 4 - Salir" );
  49.  
  50. printf("\n\n Escoge una opcion......: ");
  51. }
  52.  
  53. /* Con esta función añadimos un elemento al final de la lista */
  54. void agregar_elemento(){
  55. struct _agenda *nuevo;
  56.  
  57. /* reservamos memoria para el nuevo elemento */
  58. nuevo = (struct _agenda *) malloc (sizeof(struct _agenda));
  59. if( nuevo == NULL){
  60. printf(" \n No hay memoria disponible");
  61. }
  62. printf( "\n ===== Nuevo elemento =====" );
  63. printf( "\n Nombre.....:" );
  64. gets( nuevo->nombre );
  65. printf( "\n Telefono...:" );
  66. gets( nuevo->telefono );
  67.  
  68. /* el campo siguiente va a ser NULL por ser el último elemento*/
  69. nuevo->siguiente = NULL;
  70.  
  71. /* ahora metemos el nuevo elemento en la lista. lo situamos al final de la lista */
  72. /* comprobamos si la lista está vacía. si primero==NULL es que no
  73.          hay ningún elemento en la lista. también vale ultimo==NULL */
  74. if( primero == NULL ){
  75. printf( "\n Primer elemento" );
  76. primero = nuevo;
  77. ultimo  = nuevo;
  78. }else{
  79. /* el que hasta ahora era el último tiene que apuntar al nuevo */
  80. ultimo->siguiente = nuevo;
  81. /* hacemos que el nuevo sea ahora el último */
  82. ultimo = nuevo;
  83. }
  84. }
  85.  
  86. void mostrar_lista(){
  87. struct _agenda *auxiliar; /* lo usamos para recorrer la lista */
  88. int i=0;
  89.  
  90. auxiliar = primero;
  91. printf( "\nMostrando la lista completa:\n ");
  92. while( auxiliar != NULL ){
  93. printf( "\n Nombre: %s, Telefono: %s",
  94. auxiliar->nombre,auxiliar->telefono);
  95. auxiliar = auxiliar->siguiente;
  96. i++;
  97. }
  98. if( i==0 ){
  99. printf( "\nLa lista está vacía!!\n" );
  100. }
  101. }
  102.  
  103. //http://www.santiagoapostol.net/srca/cursoc/cursoc22.html#anadir

Desde ya muchas gracias por la ayuda que deseen brindarme.-   

rir3760, no tuve internet por 10 días y no pude responderte al otro tema, luego me ocupo.-

Saludos.
Daniel
5  Programación / Programación C/C++ / Copiar en archivo frases con varias líneas(renglones)[C] en: 16 Mayo 2015, 21:55 pm
Hola a todos.-

Citar
Cada vez que emites
un juicio o una crítica,
Estás enviando algo que
terminará por volver a ti.-
Para hacer algo como esto se me antoja declarar una estructura con 4 variable char y 4 int (índice) para poder luego buscar alguna palabra que haga referencia a la frase y poder imprimirla filtrándola por el índice, consideran que estoy bien encaminado o lo arian de otra manera.-

Desde ya muchas gracias por el tiempo que le dediquen al tema.-

Saludos.
Daniel
6  Programación / Programación C/C++ / Pasar estructura a archivo distinto del que contiene la función main[C] en: 11 Mayo 2015, 19:33 pm
Hola Gente.
Estoy aprendiendo a modular código en c y en el código que les dejo a continuación me da el siguiente error. Error: nombre de tipo desconocido ‘Fecha’, en las líneas 3:14 y 3:28.-
Dentro del mismo archivo siempre pase de esta manera las estructuras a funciones o cuando es muy grande con una variable puntero, pero en este caso me da error.-

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <time.h>
  4. #include "fechaDifDias.c"
  5.  
  6. #define MENSAJE printf( "\n\n Pulse [Enter] para continuar..." ); getchar();
  7.  
  8. typedef struct{
  9. int orden;
  10. char b;
  11. char fecha[11];
  12. float verduras;
  13. float almacen;
  14. char nota[101];
  15. }Super;
  16.  
  17. typedef struct{
  18. int dia;
  19. int mes;
  20. int año;
  21. }Fecha;
  22.  
  23. int mainMenu(void);
  24. void contarRegistros( FILE *ptrFile, Super *super, int *registros, int tamStructSuper );
  25. void rellenar_estructura(FILE *ptrFile, Super *super, int *opcRe);
  26. void escribir_archivo(FILE *ptrFile, Super *super, int tamStructSuper, int registros);
  27. void leer_archivo(FILE *ptrFile, Super *super, int registros, int cualLeer, int tamStructSuper);
  28. void buscar(FILE *ptrFile, Super *super, int tamStructSuper, int *contarReg, int *cualLeer);
  29. int resBusqueda(Super *super);
  30. void consultation(FILE *ptrFile, Super *super, int tamStructSuper);
  31. int validarFechas(  Fecha inicio, Fecha final, Fecha consulta );
  32. void feDiDi( Fecha inicio, Fecha final, int *totalDias );
  33.  
  34. int main(void){
  35. mainMenu();
  36.  
  37. return 0;
  38. }
  39.  
  40.  
  41. int mainMenu(void){
  42. Super super = {0};
  43. int ok, ch, opcMp, registros, contarReg=1, cualLeer=1, opcRe;
  44. int tamStructSuper = sizeof(int) + sizeof(char) + (sizeof(char)*11) + sizeof(float) + sizeof(float) + (sizeof(char)*101);
  45.  
  46. FILE *ptrFile;
  47. if(( ptrFile = fopen( "gastos.txt", "ab+" ) ) == NULL){
  48. perror( "\n\n error" );
  49. return 1;
  50. }
  51.  
  52. while( opcMp != 8){
  53. do{
  54. system( "cls" );
  55.  
  56. if( contarReg == 1 ){
  57. contarRegistros( ptrFile, &super, &registros, tamStructSuper );
  58. leer_archivo( ptrFile, &super, registros, cualLeer , tamStructSuper);
  59. contarReg = 0;
  60. cualLeer = 1;
  61. }
  62.  
  63. printf( "\n\n ========== Men%c principal ===========", 163 );
  64.  
  65. printf( "\n\n 1 - Buscar" );
  66. printf( "\n 2 - Agregar" );
  67. printf( "\n 3 - Modificar" );
  68. printf( "\n 4 - Borrar" );
  69. printf( "\n 5 - Consulta" );
  70. printf( "\n 6 - Marcados para borrar" );
  71. printf( "\n 7 - Empaquetar tabla" );
  72. printf( "\n 8 - Finalizar" );
  73.  
  74. printf( "\n\n Ingrese opci%cn.....: ", 162 );
  75. ok = scanf( "%d", &opcMp) == 1 && opcMp >=1 && opcMp <=8;
  76. while ((ch = getchar()) != EOF && ch != '\n');
  77. }while(!ok);
  78.  
  79. switch(opcMp){
  80. case 1 :
  81. if( registros >= 1){
  82. buscar(ptrFile, &super, tamStructSuper, &contarReg, &cualLeer);
  83. }else{
  84. printf( "\n\n No tiene ningun movimiento grabado" );
  85. MENSAJE;
  86. }
  87. break;
  88. case 2 :
  89. rellenar_estructura( ptrFile, &super, &opcRe );
  90. if( opcRe == 1 ){
  91. super.b = '+';
  92. escribir_archivo(ptrFile, &super, tamStructSuper, registros);
  93. contarReg = 1;
  94. }
  95. break;
  96. case 3 :
  97. break;
  98. case 4 :
  99. break;
  100. case 5 :
  101. consultation( ptrFile, &super, tamStructSuper );
  102. contarReg = 1;
  103. break;
  104. case 6 :
  105. break;
  106. case 7 :
  107. break;
  108. }
  109. }
  110.  
  111. fclose( ptrFile );
  112. return 0;
  113. }
  114.  
  115. void contarRegistros( FILE *ptrFile, Super *super, int *registros, int tamStructSuper ){
  116. fseek( ptrFile, 0, SEEK_END );
  117. *registros =  ftell( ptrFile ) / tamStructSuper;
  118. }
  119.  
  120. void rellenar_estructura(FILE *ptrFile, Super *super, int *opcRe){
  121. int ch, ok;
  122. char *p = NULL;
  123.  
  124. time_t tiempo = time(0);
  125. struct tm *tlocal = localtime(&tiempo);
  126. char fecha[11];
  127. strftime(fecha,11,"%d/%m/%Y", tlocal);
  128.  
  129. printf( "\n ================== Agregar operaci%cn ==================", 162 );
  130.  
  131. do{
  132. printf( "\n\n Ingrese fecha (formato ==> %s..................: ", fecha );
  133. fgets(super->fecha, 11, stdin);
  134. if((p=strchr(super->fecha, '\n'))){
  135. *p='\0';
  136. }
  137. else{
  138. while((ch = getchar()) !='\n' && ch!=EOF);
  139. }
  140. ok = strlen(super->fecha);
  141. if( ok != 10 || super->fecha[2] != '/' || super->fecha[5] != '/'){
  142. ok = 0;
  143. }
  144. }while(ok !=10);
  145.  
  146. do{
  147. printf( "\n Ingrese importe gastado en verduler%ca (0 = sin gasto)..: ", 161 );
  148. ok = scanf( "%f", &super->verduras) == 1 && super->verduras >= 0;
  149. while ((ch = getchar()) != EOF && ch != '\n');
  150. }while(!ok);
  151.  
  152. do{
  153. printf( "\n Ingrese importe gastado en almac%cn (0 = sin gasto).....: ", 130 );
  154. ok = scanf( "%f", &super->almacen) == 1 && super->almacen >= 0;
  155. while ((ch = getchar()) != EOF && ch != '\n');
  156. }while(!ok);
  157.  
  158. printf( "\n Ingrese recordatorio (m%cximo 100 caracteres)...........: ", 160 );
  159. fgets(super->nota, 101, stdin);
  160. if((p=strchr(super->nota, '\n'))){
  161. *p='\0';
  162. }
  163. else{
  164. while((ch = getchar()) !='\n' && ch!=EOF);
  165. }
  166.  
  167. printf( "\n =============== Grabar en base de datos ===============" );
  168. printf( "\n 1 - Graba" );
  169. printf( "\n 2 - Descarta" );
  170. do{
  171. printf( "\n\n Ingrese opci%cn.....: ", 162 );
  172. ok = scanf( "%d", opcRe) == 1 && *opcRe >= 1 && *opcRe <= 2;  
  173. while((ch = getchar()) !='\n' && ch!=EOF);
  174. }while(!ok);
  175. }
  176.  
  177. void escribir_archivo( FILE *ptrFile, Super *super, int tamStructSuper, int registros ){
  178. super->orden = registros + 1;
  179. fseek( ptrFile, 0, SEEK_END );
  180. fwrite( super, tamStructSuper, 1, ptrFile );
  181. }
  182.  
  183. void leer_archivo( FILE *ptrFile, Super *super, int registros, int cualLeer, int tamStructSuper ){
  184. float total = 0.0;
  185. printf( "\n\n =======================================================" );
  186. printf( " \n\n  Fecha        Verduler%ca    Almac%cn     Total", 161, 130 );
  187.  
  188. if(cualLeer == 1){
  189. rewind( ptrFile);
  190. while( fread( super, tamStructSuper, 1, ptrFile ) == 1 ){
  191. if( super->orden == registros){
  192. fread( super, tamStructSuper, 1, ptrFile );
  193. }
  194. }
  195. }
  196. total = super->verduras + super->almacen;
  197. printf( "\n %11s %12.2f %10.2f %9.2f (total movimientos..: %d)", super->fecha,  super->verduras, super->almacen, total, registros );
  198. printf( "\n\n =======================================================" );
  199. }
  200.  
  201. void buscar(FILE *ptrFile, Super *super, int tamStructSuper, int *contarReg, int *cualLeer){
  202. char pBuscar[11], *p = NULL;
  203. int ch, ok, opcion;
  204.  
  205. do{
  206. printf( "\n\n Ingrese fecha a buscar (formato ==> 11/04/2015)....: " );
  207. fgets(pBuscar, 11, stdin);
  208. if((p=strchr(pBuscar, '\n'))){
  209. *p='\0';
  210. }
  211. else{
  212. while((ch = getchar()) !='\n' && ch!=EOF);
  213. }
  214. ok = strlen(pBuscar);
  215. if( ok != 10 || pBuscar[2] != '/' || pBuscar[5] != '/'){
  216. ok = 0;
  217. }
  218. }while(!ok);
  219.  
  220. ok=0;
  221. rewind( ptrFile);
  222. while( fread( super, tamStructSuper, 1, ptrFile ) == 1 ){
  223. if( strstr(pBuscar, super->fecha) != NULL){
  224. ok++;
  225. opcion = resBusqueda( super );
  226. if( opcion == 1 ){
  227. *contarReg = 1;
  228. *cualLeer = 2;
  229. }
  230. else if( opcion == 3 ){
  231. *contarReg = 1;
  232. *cualLeer = 1;
  233. }
  234. break;
  235. }
  236. }
  237. if( ok == 0){
  238. printf( "\n\n No existe..." );
  239. MENSAJE;
  240. }
  241. }
  242.  
  243. int resBusqueda( Super *super ){
  244. float totalBus;
  245. int opcionEnc, ch, ok;
  246.  
  247. printf( "\n\n =======================================================" );
  248. printf( " \n\n  Fecha        Verduler%ca    Almac%cn     Total", 161, 130 );
  249.  
  250. totalBus = super->verduras + super->almacen;
  251. printf( "\n %11s %12.2f %10.2f %9.2f", super->fecha,  super->verduras, super->almacen, totalBus);
  252.  
  253. do{
  254. printf( "\n\n ===== Opciones de lo encontrado =====" );
  255. printf( "\n\n  1 - Encontrado" );
  256. printf( "\n  2 - Continuar..." );
  257. printf( "\n  3 - Finalizar" );
  258. printf( "\n\n Ingrese opci%cn.....: ", 162 );
  259. ok = scanf( "%d", &opcionEnc) == 1 && opcionEnc >= 1 && opcionEnc <= 3;
  260. while ((ch = getchar()) != EOF && ch != '\n');
  261. }while(!ok);
  262.  
  263. return opcionEnc;
  264. }
  265.  
  266. void consultation(FILE *ptrFile, Super *super, int tamStructSuper){
  267. Fecha inicio;
  268. Fecha final;
  269. Fecha consulta;
  270. int ok, vFecha, ch, totalDias=0;
  271. float totalVer = 0.00, totalAlm = 0.00, subTotal = 0.00, totalCon = 0.00;
  272.  
  273. printf( "\n\n Ingrese INICIO de la consulta (formato ==> 11/04/2015)....: " );
  274. scanf("%d/%d/%d", &inicio.dia, &inicio.mes, &inicio.año);
  275. while ((ch = getchar()) != EOF && ch != '\n');
  276.  
  277. printf( "\n\n Ingrese FINAL de la consulta (formato ==> 11/04/2015).....: " );
  278. scanf("%d/%d/%d", &final.dia, &final.mes, &final.año);
  279. while ((ch = getchar()) != EOF && ch != '\n');
  280.  
  281. printf( "\n\n =======================================================" );
  282. printf( " \n\n Fecha        Verduler%ca    Almac%cn     Total", 161, 130 );
  283.  
  284. ok=0;
  285. rewind( ptrFile);
  286. while( fread( super, tamStructSuper, 1, ptrFile ) == 1 ){
  287. sscanf( super->fecha, "%d/%d/%d", &consulta.dia, &consulta.mes, &consulta.año );
  288. vFecha = validarFechas( inicio , final, consulta );
  289. if( vFecha == 1 ){
  290. ok++;
  291. totalVer += super->verduras;
  292. totalAlm += super->almacen;
  293. subTotal = super->almacen + super->verduras;
  294. totalCon += subTotal;
  295. printf( "\n%11s %12.2f %10.2f %9.2f", super->fecha,  super->verduras, super->almacen, subTotal);
  296. }
  297. }
  298. if( ok > 0 ){
  299. feDiDi( inicio, final, &totalDias );
  300. printf( "\n\n Totales %15.2f%11.2f%10.2f", totalVer, totalAlm, totalCon);
  301. }else{
  302. printf( "\n\n No  hay movimientos..." );
  303. }
  304. MENSAJE;
  305. }
  306.  
  307. int validarFechas(  Fecha inicio, Fecha final, Fecha consulta ){
  308. unsigned long _inicio = (inicio.año * 365) + (inicio.mes * 28) + inicio.dia;
  309. unsigned long fin = (final.año * 365) + (final.mes * 28) + final.dia;
  310. unsigned long fecha = (consulta.año * 365) + (consulta.mes * 28) + consulta.dia;
  311.  
  312. if( fecha >= _inicio && fecha <= fin ){
  313.        return 1;
  314.    }else{
  315.        return 0;
  316.    }
  317. }


Código
  1. int numeroBisiestos( int año );
  2.  
  3. void feDiDi( Fecha inicio, Fecha final, int *totalDias ){
  4. int totalDiasAnio[] = {00,31,59,90,120,151,181,212,243,273,304,334,365};
  5. int difAnio=0, i;
  6.  
  7. difAnio = final.año - inicio.año;
  8.  
  9. if( difAnio == 0){
  10. *totalDias += (totalDiasAnio[final.mes-1] + final.dia) - (totalDiasAnio[inicio.mes-1] + inicio.dia);
  11. if( inicio.mes <= 2 && final.mes > 2) {*totalDias += numeroBisiestos(inicio.año);}
  12. }
  13. else{
  14. *totalDias += 365 - (totalDiasAnio[inicio.mes-1] + inicio.dia);
  15. if( inicio.mes < 3) {*totalDias += numeroBisiestos(inicio.año);}
  16.  
  17. for( i= inicio.año +1; i< final.año; i++ ){
  18. *totalDias += 365 + numeroBisiestos(i);
  19. }
  20.  
  21. *totalDias += totalDiasAnio[final.mes-1] + final.dia;
  22. if( final.mes > 2) {*totalDias += numeroBisiestos(final.año);}
  23. }
  24. }
  25.  
  26. int numeroBisiestos( int año ){
  27. if((año %4 == 0 && año%100 != 0) || (año%400) == 0){return 1;}
  28. else{return 0;}
  29. }
Es todo y espero como siempre de vuestra ayuda.-

Saludos.
Daniel   
7  Programación / Programación C/C++ / fechas guardadas en variables char validar ">=, <=" en: 21 Abril 2015, 18:25 pm
Hola a todos.
¿Hay otra manera más práctica para hacer esto?, lo que se me antoja es separar día, mes y año castearlo a int y luego compararlas una a una.-
Dejo la función por si desean hacerme alguna observación.-

Código
  1. void consultation(FILE *ptrFile, Super *super, int tamStructSuper){
  2. char fechaIni[11], fechaFin[11], *p = NULL;
  3. int ch, ok;
  4. float totalPar = 0.0, totalCon = 0.0;
  5.  
  6. do{
  7. printf( "\n\n Ingrese INICIO de la consulta (formato ==> 11/04/2015)....: " );
  8. fgets(fechaIni, 11, stdin);
  9. if((p=strchr(fechaIni, '\n'))){
  10. *p='\0';
  11. }
  12. else{
  13. while((ch = getchar()) !='\n' && ch!=EOF);
  14. }
  15. ok = strlen(fechaIni);
  16. if( ok != 10 || fechaIni[2] != '/' || fechaIni[5] != '/'){
  17. ok = 0;
  18. }
  19. }while(!ok);
  20.  
  21. do{
  22. printf( "\n\n Ingrese FINAL de la consulta (formato ==> 11/04/2015).....: " );
  23. fgets(fechaFin, 11, stdin);
  24. if((p=strchr(fechaFin, '\n'))){
  25. *p='\0';
  26. }
  27. else{
  28. while((ch = getchar()) !='\n' && ch!=EOF);
  29. }
  30. ok = strlen(fechaFin);
  31. if( ok != 10 || fechaFin[2] != '/' || fechaFin[5] != '/'){
  32. ok = 0;
  33. }
  34. }while(!ok);
  35.  
  36. printf( "\n\n =======================================================" );
  37. printf( " \n\n Fecha        Verduler%ca    Almac%cn     Total", 161, 130 );
  38.  
  39. ok=0;
  40. rewind( ptrFile);
  41. while( fread( super, tamStructSuper, 1, ptrFile ) == 1 ){
  42. if( super->fecha >= fechaIni && super->fecha <= fechaFin ){
  43. ok++;
  44. totalPar = super->verduras + super->almacen;
  45. totalCon += totalPar;  
  46. printf( "\n%11s %12.2f %10.2f %9.2f", super->fecha,  super->verduras, super->almacen, totalPar);
  47. }
  48. }
  49. if( ok > 0 ){
  50. printf( "\n\n Total de la consulta.................$ %.2f", totalCon );
  51. }else{
  52. printf( "\n\n No  hay movimientos entre el %s al %s", fechaIni, fechaFin );
  53. }
  54. MENSAJE;
  55.  
  56. }
  57.  
Saludos.
Daniel
8  Programación / Programación C/C++ / Evacuar dudas sobre punteros en lenguaje C. en: 15 Marzo 2015, 18:36 pm
Hola a todos.
Tengo unas cuantas dudas sobre punteros y voy a usar este espacio para evacuarlas todas juntas (de a una) espero con esto no infringir las reglas del foro, me faltan unos temas para terminar el libro y tal vez haya una diferencia de meses entre la primera y la última consulta, en este caso como empecé a estudiar inglés (de forma autodidacta como siempre) estoy haciendo un programita para aprender las 1000 palabras más usadas en inglés, como comprenderán no puedo poner todo en el main y cuando pase la estructura, el archivo, etc. A las funciones seguramente o no me correrá el programa y si logro que todo funcione seguramente me surgirán alguna duda como la que expongo a continuación.-



NOTA: Veria con mucho agrado que alguien que tenga alguna duda sobre punteros las expusiera aquí.-

Un abrazo y gracias como siempre.
Daniel
9  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
10  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
Páginas: [1] 2 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines