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

Gracias por tu respuesta vangodp, usar un string es una buena opción porque no haré cálculos, así lo hice al inicio, carnet era un string, use gets para obtener los datos, pero se saltaba esa parte y lo mismo pasaba con el nombre, porque también usaba gets y solo me pedía edad, por eso cambie carnet a int, ya no me dio ese error y pedí nombre con cin y no con gets, lo bueno es que después de mucho luchar y analizar logre resolver el problema de carnet repetido, dejo el código para que lo vean.

#include <iostream>
#include <cstdlib>

using namespace std;

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

struct estudiantes{

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

};

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

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

int main(){

estudiantes *preg;
preg = new estudiantes[100];

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(preg);

}
break;
case 2:{}
break;
case 3:{

LIMPIA_PANTALLA;
muestraDatos(preg);

}
break;
case 4:{}
break;
case 5:

delete [] preg;
op = 5;

break;

}
} //Fin bucle while

}//Fin programa

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

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

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

LIMPIA_PANTALLA;
cout << "\n\n\n\n\n\t\t\tAlumno [" << i+1 << "]" << endl;
cout << "\n\t\t\tIngresa No. de carnet: ";
cin >> j;
//Aqui va la verificacion del carnet
if(i>0){
while(fin == false){
if(j == x[k].carnet){
cout << "\n\t\t\tNo. de carnet ya existe" << endl;
cout << "\n\t\t\tIngresa No. de carnet: ";
cin >> j;
k=0;
}
else{
k++;
}
if(k==n){
x[i].carnet = j;
fin = true;
}
}//Fin while
}
else{
x[i].carnet = j;
}

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

}//Fin for

cout << "\n\n\n\t\t\t";
PAUSA;

}

void muestraDatos(estudiantes x[]){

cout << "\n\n\n\t\t\tListado de estudiantes\n";
for(int i=0; i<n; i++){

cout << "\n\n\t\t\tNo. carnet:\t" << x[i].carnet;
cout << "\n\t\t\tNombre:\t\t" << x[i].nombre << " " << x[i].apellido;
cout << "\n\t\t\tEdad:\t\t" << x[i].edad;

}

cout << "\n\n\n\t\t\t";
PAUSA;

}