Dev - C++ - Ayuda con un ciclo en mi programa en C

 
Vista:
sin imagen de perfil

Ayuda con un ciclo en mi programa en C

Publicado por Diego (1 intervención) el 20/05/2017 04:35:54
Hola buenas a todos soy nuevo en el foro y en programación es mi primer cuatrimestre viendo algo de programación. Tengo un detalle con mi siguiente programa en realidad el programa es muchísimo mas largo pero quiero resolverlo en partes y me he atorado en esto. El programa debe dejarme introducir los datos de x alumnos como se muestra y si quiero salirme y volver a entrar y meter mas alumnos que me deje. No debo superar los 40 alumnos y el problema surge cuando imprimo datos en la primera ocasión pueden dar de alta los datos de 2 alumnos, por ejemplo, salirte al menu y mostrar los datos de esos dos. Pero si vuelvo a registrar otros dos, ahora al mostrar los datos solo me muestra los datos del ultimo usuario que haya registrado en cada una de esas dos veces que registre. Creo que mi error puede estar en como mando a imprimir los datos me gustaría un consejo de ustedes que son expertos en la materia. El progra es el siguiente no esta completo como dije solo es una parte para que chequen lo que pasa en el 1 grupo a registrar:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>



struct datos
{
char nom[20],carr[10];
int codigo;
float p1,p2,par,tar;

};


struct datos a[40];

main()
{

float promedio,f;
int oopc,opc,i=0,z,h,L=0,otro,j=0,m=0,p=1,kha=0;

do{
printf("Selecciona un grupo \n1-Grupo 1\n2-Grupo 2\n3-Grupo 3");
scanf("%d",&oopc);
switch(oopc){

case 1:{
do{
printf("\nMenu Principal del Grupo 1\n");
printf("Selecciona una opcion: \n1-Capturar datos \n2-Mostrar datos\n3-Ver el promedio de edades\n\n");
scanf("%d",&opc);

switch(opc)
{
case 1:{

printf("Cuantos usuarios vas a registrar?");
scanf("%d",&otro);

for(i=0;i<otro;i++){
printf("\nNombre de la persona %d:\n",p);
fflush(stdin);
gets(a[i].nom);
printf("\nCodigo escolar:\n");
scanf("%d",&a[i].codigo);
printf("\nCarrera:\n");
fflush(stdin);
gets(a[i].carr);
printf("\nCuanto saco en su primer examen parcial:\n");
scanf("%f",&a[i].p1);
printf("\nCuanto saco en su segundo examen parcial:\n");
scanf("%f",&a[i].p2);
printf("Cuantas participaciones tuvo?");
scanf("%f",&a[i].par);
printf("Cuantas tareas tuvo?");
scanf("%f",&a[i].tar);m++;p++;}

printf("Desea: \n1-Volver al menu\n2-Cerrar el programa");
scanf("%d",&j);


system("cls");
L++;
break;
}


case 2:{
if(L!=0){

for(i=0;i<m;i++){
printf("\nNombre: %s\nCodigo: %d\nCarrera: %s\nExamen parcial 1: %f\nExamen parcial 2: %f \nPartcicipaciones: %f \nTareas: %f",a[i].nom,a[i].codigo,a[i].carr,a[i].p1,a[i].p2,a[i].par,a[i].tar);



}

printf("\nDesea: \n1-volver al menu\n2-Cerrar programa");
scanf("%d",&j);}

if(L==0)
{ printf("No ha ingresado datos");
printf("\nDesea: \n1-volver al menu\n2-Cerrar programa");
scanf("%d",&j);}




system("cls");
break;
}
}
}
while(j==1);
}
}
}
while(z==1);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Leonardo
Val: 26
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con un ciclo en mi programa en C

Publicado por Leonardo (11 intervenciones) el 25/05/2017 21:56:03
El problema es que debes llevar un registro de dónde(en qué valor) terminó el ciclo para que inicie en ese mismo valor pero lo tienes
siempre iniciando en cero y te sobreescribe los valores del arreglo. Mira el adjunto con una posible solución.

espero sirva. Ah! trata de usar nombres más explicitos para las variables.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar