25/05/2014, 16:02
|
| | | 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;
} |