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]
1  Programación / Programación C/C++ / Preguntas de noob en C en: 12 Abril 2013, 02:30 am
Buenas gente!
:D

Bueno, os cuento, no controlo C, estoy haciendo un cursillo de introducción y tal. Nos han enviado unos ejercicios para entregar, y anque los he acabado, hay un programa en concreto que hace cosas raras que no entiendo.

Lo peor es que no sé como buscarlo, he dado mil vueltas y ni idea. Es difícil buscar algo si no sabes cómo se llama, y por aquí ya son las 2 am, por hoy me he rendido y os vengo a pedir ayuda T_T

Son dos problemas. Por un lado tengo una variable que debería ir dentro del main (o eso es lo que me dice el sentido comun), pero si la declaro dentro del main, más tarde dentro de un while el valor se pone a 0 en cada iteración, O_o
Si la declaro como variable global, esto no pasa o_O

Y el segundo problema es parecido. Tengo una estructura de datos, y un array de esa estructura. Pues en algun momento del programa el primer campo del primer elemento del array se pone a 0. Con los demás elementos del array no pasa, y si cambio el orden en que declaro los campos de la estructura, siempre es el primero que se pone a 0.

¿Es normal esto? ¿Sabéis porqué pasa y cómo se puede evitar? :S

No sé si pegar el código o no, la verdad es que me da vergüenza, mientras buscaba lo mio entre en el tema de "cosas que no hay que hacer", y yo hago unas cuantas xD
Además son unas 240 línas (contando comentarios y saltos de línea).

Bueno, os pongo el main por si algún alma caritativa entiende qué hago mal :)
Las funciones son practicamente asignaciones y ya...

Muchas gracias de antemano! :D

Código
  1. #include <stdio.h>
  2.  
  3. #define CIERTO 1
  4. #define FALSO 0
  5. #define TAML 30
  6. #define TAMN 50
  7.  
  8. int ocup;
  9. struct cliente {
  10.       int id;
  11.       char nombre[TAMN];
  12.       int saldo;
  13. };
  14.  
  15. void imprimirMenu();
  16. void imprimirVuelta();
  17. struct cliente nuevoCliente();
  18. void mostrarCliente(struct cliente lista[]);
  19. void mostrarLista(struct cliente lista[], int ocup);
  20. void modificarCliente(struct cliente lista[]);
  21. void mostrarInfo(struct cliente *cliente);
  22.  
  23.  
  24. int main (void){
  25.  
  26.  
  27.  
  28.    struct cliente clientes[TAML];
  29.    ocup = 0; //ocupacion del array
  30.    char op; //opción del menu
  31.    int exit = FALSO;
  32.  
  33.    //navegar por el menu
  34.    while (exit != CIERTO){
  35.          imprimirMenu();
  36.          scanf("%s", &op); //despues de esta instruccion ocup = 0 si
  37.                                     //la declaro dentro del main :S
  38.          switch (op){
  39.                 case 'a':
  40.                 case 'A':
  41.                      clientes[ocup] = nuevoCliente();
  42.                      ocup++;
  43.                 break;
  44.  
  45.                 case 'b':
  46.                 case 'B':
  47.                      mostrarCliente(clientes);
  48.                 break;    
  49.  
  50.                 case 'c':
  51.                 case 'C':
  52.                      mostrarLista(clientes, ocup);
  53.                 break;
  54.  
  55.                 case 'd':
  56.                 case 'D':
  57.                      modificarCliente(clientes);
  58.                 break;    
  59.  
  60.                 case 'e':
  61.                 case 'E':
  62.                      exit = CIERTO;
  63.                 break;
  64.  
  65.                 default:
  66.                         printf("Opcion no reconocida, vuelva a escoger.\n");
  67.                         fflush(stdin);
  68.                         getchar();
  69.                 break;
  70.  
  71.          }
  72.  
  73.    }
  74.    printf("Presione enter para salir.\nHasta otra!!!");
  75.  
  76.     fflush(stdin);
  77.     getchar();
  78.  
  79.    return 0;
  80.  
  81. }
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines