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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  buscar deuda mayor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: buscar deuda mayor  (Leído 6,390 veces)
minette1988

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: buscar deuda mayor
« Respuesta #10 en: 8 Junio 2010, 17:13 pm »

He modificado lo de double deuda_mayor = 0.0 y he puesto int deuda_mayor=0, pero me da estos errores:
En la función ‘deuda_mayor’:
deuda_mayor.c:113: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:113: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:117: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:117: error: el valor indicado por el subíndice no es ni matriz ni puntero


En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: buscar deuda mayor
« Respuesta #11 en: 8 Junio 2010, 17:20 pm »

Código:
int main()
{
void crear_fich();
void deuda_mayor();
...

Las declaraciones de las funciones se hacen fuera de la funcion main()

Cita de: minette1988
En la función ‘deuda_mayor’:
deuda_mayor.c:113: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:113: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:117: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:117: error: el valor indicado por el subíndice no es ni matriz ni puntero

Esos errores son porque intentas acceder a cli como si fuera un arreglo de estructura y no lo tenes declarado como tal.

Código:
struct cliente cli;
...
cli[i].deuda
...

Otro error que te veo es que nunca inicializas la variable num_clientes sin embargo realizas una comparacion i < num_clientes

Salu10.


En línea

minette1988

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: buscar deuda mayor
« Respuesta #12 en: 8 Junio 2010, 20:39 pm »

Acabo de modificarlo, corriguiendo los errores que me has dicho, pero cuando le doy a la opción 2 que busca la deuda más alta y la muestra por pantalla no hace nada.
En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: buscar deuda mayor
« Respuesta #13 en: 9 Junio 2010, 15:46 pm »

Cita de: minette1988
Sigue sin funcionarme. Ayudadme, por favor.

Hola minette1988, la verdad yo te recomendaria plantearte bien que queres hacer y cual seria la mejor manera de hacerlo.

A lo largo de varias correcciones que se le han hecho a tu codigo, se nota que careces de conocimiento de muchos conceptos basicos.

Siendote sincero y espero no ofenderte, tu codigo es un lindo lio.

Citar
Cuando haces un mal trabajo y nadie te lo dice quiere decir que se han rendido contigo. Cuando alguien te esta corrigiendo lo hacen porque quieren que lo hagas mejor.

No dudes en consultar cualquier duda que tengas, que para eso estamos...

Salu10.
En línea

minette1988

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: buscar deuda mayor
« Respuesta #14 en: 10 Junio 2010, 12:00 pm »

Hola, en la función deuda_mayor lo primero que hago es definir la estructura:
     struct cliente cli;
luego como me interesa buscar la deuda más alta declaro una variable llamada deuda_mayor de tipo int que será la posición en la que se encuentra. Hasta aquí bien ¿no?. La duda que tengo es esta: La variable deuda que tengo definida en el struct cliente, ¿la tengo que comparar con la variable deuda_mayor que se encuentra en la función deuda_mayor?, ¿la variable deuda tengo que volver a definirla en este módulo o no hace falta?
En línea

minette1988

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: buscar deuda mayor
« Respuesta #15 en: 10 Junio 2010, 13:33 pm »

He hecho la siguiente modificación :

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define LEE_CHAR(c)\
  6. c=getchar();\
  7. while((c=='\n') || (c==' ') || (c=='\t'))\
  8. c=getchar();
  9.  
  10. #define LEE_CAD(c,n) { int i=0; \
  11.                      c[i]=getchar();\
  12.     while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
  13.     while ((c[i]!='\n') && (i < (n-1))){ \
  14.        i++;\
  15. c[i]=getchar(); }\
  16.     c[i]='\0'; }
  17.  
  18. #define TAM_NOMBRE 100
  19.  
  20.  
  21. struct cliente{
  22. char nombre[TAM_NOMBRE];
  23.        double deuda;
  24. };
  25. int main(){
  26.  void alta();
  27.  void mostrar_todo();
  28.  void deuda_mayor();
  29.  char op;
  30.  FILE * pf;
  31.  
  32.  if((pf = fopen("datos.dat", "wb")) == NULL) {/*"rb+"*/
  33.           /* Si no existe, ejecuta el módulo que lo cree */
  34.   alta();
  35.  
  36.      if((pf = fopen("clientes.dat", "rb")) == NULL) {
  37. perror("Fichero no accesible");
  38.                exit(1);
  39.      }
  40.  }
  41.  
  42.  do{
  43. printf("MENÚ\n----\n");
  44.  
  45. printf("1). Dar de alta un cliente.\n");
  46.                printf("2). Mostrar todo.\n");
  47.                printf("3). Deuda mayor.\n");
  48.                printf("4). salir y eliminar.\n");
  49.                printf("0). Salir\n\nOpción(0-4): ");
  50.  
  51.                do{
  52. LEE_CHAR(op);
  53. }while( (op < '0') || (op >'4') );
  54.  
  55. switch(op){
  56.                    case '1': alta(pf); break;
  57.                    case '2': mostrar_todo(pf); break;
  58.                    case '3': deuda_mayor(pf); break;
  59.                    case '4':{ fclose(pf); pf=NULL; remove("clientes.dat"); op= '0';
  60. break;}
  61. }
  62.  }while(op != '0');
  63.  
  64. exit(0);
  65. }//main()
  66. //////////////////////////////////////////////////////////          
  67. void alta(FILE *pf){
  68.      struct cliente cli;
  69.      int fin;
  70.  
  71.  if((pf = fopen("clientes.dat", "ab")) == NULL) {
  72. printf("Error al crear el fitxer\n");
  73. }
  74. else {
  75. fin = 1; /* Termina con fin == 0 */
  76.  
  77.  
  78. while ( fin ) {
  79. printf ("Nombre del cliente: ");
  80. LEE_CAD(cli.nombre,TAM_NOMBRE);
  81.                        printf ("Deuda: ");
  82.                        scanf("%lf",&cli.deuda);
  83. fwrite(&cli,1,sizeof cli,pf);
  84. printf("Otro (0--> NO, 1--> SI)? ");
  85. scanf("%d",&fin);
  86. }
  87. if (fclose(pf))
  88. printf("Error al guardar el fichero\n");
  89. }
  90. }
  91. /////////////////////////////////////////////
  92. void mostrar_todo(FILE *pf){
  93.       struct cliente cli;
  94.  
  95.       if((pf = fopen("clientes.dat", "rb")) == NULL) {
  96. printf("Error al abrir el fichero clientes.dat\n");
  97.       }
  98.       else{
  99.  
  100. fread(&cli, 1, sizeof cli, pf);
  101.        while (!feof(pf)){
  102. printf("%s  %.2lf\n", cli.nombre, cli.deuda);
  103. fread(&cli,1, sizeof cli,pf);
  104.        }
  105.        fclose(pf);
  106.  }
  107. }
  108. //////////////////////////////////
  109. void deuda_mayor(FILE * pf){
  110.        struct cliente max,cli;
  111.  
  112.        if((pf = fopen("clientes.dat", "rb")) == NULL) {
  113. printf("Error al abrir el fichero clientes.dat\n");
  114.        }
  115.        else{
  116.             fread(&max,1,sizeof cli,pf);/*supongo que el primero es el mayor*/
  117.             while(!feof(pf)){
  118.                if(cli.deuda > max.deuda)/*si es mayor que el actual lo cambia*/
  119.                   max=cli;
  120.                fread(&cli,1,sizeof cli,pf);
  121.             }
  122.        }
  123.        fclose(pf);
  124.        printf("%s %.2lf\n",cli.nombre,cli.deuda);
  125. }

Cuando lo compilo introduzco los datos de 2 clientes: Si la deuda del primero es mayor que la del segundo me muestra la del segundo que es la más pequeña, sin embargo si la deuda del segundo es mayor que la del primero me muestra ésta última. ¿Dónde está el fallo? Ayudadme, por favor, el martes tengo recuperación. Gracias.
« Última modificación: 12 Junio 2010, 14:12 pm por minette1988 » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Deuda privada convertida en deuda publica
Foro Libre
crazykenny 2 2,877 Último mensaje 16 Abril 2011, 19:01 pm
por ignorantev1.1
Deuda española,prima de riesgo,españa va mal.
Foro Libre
Anonymous250 3 2,994 Último mensaje 1 Diciembre 2011, 00:54 am
por Last_
¿Qué buscar a la hora de comprar un móvil para una persona mayor?
Noticias
wolfbcn 0 1,214 Último mensaje 29 Marzo 2016, 21:50 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines