Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Rotula

#1
Programación C/C++ / Preguntas de noob en C
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

#include <stdio.h>

#define CIERTO 1
#define FALSO 0
#define TAML 30
#define TAMN 50

int ocup;
struct cliente {
       int id;
       char nombre[TAMN];
       int saldo;
};

void imprimirMenu();
void imprimirVuelta();
struct cliente nuevoCliente();
void mostrarCliente(struct cliente lista[]);
void mostrarLista(struct cliente lista[], int ocup);
void modificarCliente(struct cliente lista[]);
void mostrarInfo(struct cliente *cliente);


int main (void){
   
 
           
    struct cliente clientes[TAML];
    ocup = 0; //ocupacion del array
    char op; //opción del menu
    int exit = FALSO;
   
    //navegar por el menu
    while (exit != CIERTO){
          imprimirMenu();
          scanf("%s", &op); //despues de esta instruccion ocup = 0 si
                                     //la declaro dentro del main :S
          switch (op){
                 case 'a':
                 case 'A':
                      clientes[ocup] = nuevoCliente();
                      ocup++;
                 break;
                 
                 case 'b':
                 case 'B':
                      mostrarCliente(clientes);
                 break;   
                 
                 case 'c':
                 case 'C':
                      mostrarLista(clientes, ocup);
                 break;

                 case 'd':
                 case 'D':
                      modificarCliente(clientes);
                 break;   
                 
                 case 'e':
                 case 'E':
                      exit = CIERTO;
                 break;
                 
                 default:
                         printf("Opcion no reconocida, vuelva a escoger.\n");
                         fflush(stdin);
                         getchar();
                 break;
                 
          }
         
    }
    printf("Presione enter para salir.\nHasta otra!!!");
   
     fflush(stdin);
     getchar();
     
    return 0;
       
}