Ayuda con ciclo en C

Iniciado por Diego Perez, 20 Mayo 2017, 06:43 AM

0 Miembros y 1 Visitante están viendo este tema.

Diego Perez

Buenas a todos soy nuevo en el aqui y en programación es mi primer cuatrimestre viendo algo de programación.No he tenido suerte de un grn preofe pero los libros me respaldan. 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:


Código (cpp) [Seleccionar]
#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);
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

engel lex

siempre registras usuarios desde la posición 0, deberías usar un contador con los usuarios ingresados para saber donde agregar uno nuevo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.