Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2014, 16:02
Avatar de sorfistaweb
sorfistaweb
 
Fecha de Ingreso: febrero-2014
Ubicación: Guatemala
Mensajes: 21
Antigüedad: 10 años, 9 meses
Puntos: 0
Problema con arreglos y funciones en C++

Hola a tod@s, necesito de su ayuda, tengo que hacer un programa que lleva el registro de estudiantes, numero carnet, nombre y edad, aun no esta terminado:

- declare una estructura y luego un arreglo de estructuras (el usuario puede
indicar cuantos estudiantes va a ingresar [n])
- cree una función para llenar el arreglo, pero el carnet no se puede repetir
- entonces dentro de la función hay una condicional que comprueba que no se
repita

El problema es:

- que pido el ingreso de nombre con gets, pero al ejecutarlo, pide carnet y luego
se salta el nombre y me pide la edad, no pide el nombre.
- si utilizo cin en lugar de gets, funciona bien, pero me da otro problema, si n > 5,
solo me pide 4 datos y luego se congela el programa y me da error.

Necesito ayuda por favor, que puede estar pasando o cual es mi error??

#include <iostream>

using namespace std;

//Variables
int op=0, n=0;

struct estudiantes{

int carnet;
char nombre[50];
int edad;

};

//Constantes
#define PAUSA_MENSAJE system("pause")
#define PAUSA system("pause>nul")
#define LIMPIA_PANTALLA system("cls")

//Funciones
void ingresaDatos(estudiantes x[]);
void ordenaDatos();
void muestraDatos();
void grabaArchivoyCierra();
void abrirArchivoylectura();
void buscaDatos();

int main(){

estudiantes reg[n];

//estudiantes *preg = reg;

while(op != 5){

LIMPIA_PANTALLA;

cout << "\n\n\n\n\n\n\t\t\tControl de estudiantes" << endl;
cout << "\n\t\t\t1. Ingresar estudiantes";
cout << "\n\t\t\t2. L estudiantes";
cout << "\n\t\t\t3. Lista de estudiantes";
cout << "\n\t\t\t4. Lista ordenada de estudiantes";
cout << "\n\t\t\t5. Salir";
cout << "\n\n\t\t\tEscribe tu opcion: ";

cin >> op;

switch(op){
case 1:
LIMPIA_PANTALLA;
cout << "\n\n\t\tCuantos estudiantes vas a ingresar: ";
cin >> n;
ingresaDatos(reg);

break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:

op = 5;

break;



}

} //Fin bucle while


}//Fin programa

/* Funcion que permite llenar el arreglo
de estructuras con los datos correspondientes */
void ingresaDatos(estudiantes x[]){

int i=0,j,k;
bool fin=false;

for(i=0; i<n; i++){

LIMPIA_PANTALLA;
cout << "\n\n\n\n\n\t\t\tAlumno [" << i+1 << "]" << endl;
cout << "\n\t\t\tIngresa No. de carnet: ";
cin >> x[i].carnet;

if(i>0){

while(fin == false){

for(j=1; j<n; j++){
for(k=0; k<n-i; k++){
if(x[k].carnet == x[k+1].carnet){

cout << "\n\t\t\tNo. de carnet ya existe." << endl;
cout << "\n\t\t\tIngresa No. de carnet: ";
cin >> x[i].carnet;

}
else{

fin=true;

}
}
}
}//Fin while
}//Fin if

cout << "\n\t\t\tNombre del estudiante: ";
gets(x[i].nombre);
cout << "\n\t\t\tEdad del estudiante: ";
cin >> x[i].edad;

}

cout << "\n\n\n\t\t\t";
PAUSA_MENSAJE;

}