Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Diego Perez en 20 Mayo 2017, 06:43 am



Título: Ayuda con ciclo en C
Publicado por: Diego Perez en 20 Mayo 2017, 06:43 am
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
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5.  
  6.  
  7. struct datos
  8. {
  9. char nom[20],carr[10];
  10. int codigo;
  11. float p1,p2,par,tar;
  12.  
  13. };
  14.  
  15.  
  16. struct datos a[40];
  17.  
  18. main()
  19. {
  20.  
  21. float promedio,f;
  22. int oopc,opc,i=0,z,h,L=0,otro,j=0,m=0,p=1,kha=0;
  23.  
  24. do{
  25. printf("Selecciona un grupo \n1-Grupo 1\n2-Grupo 2\n3-Grupo 3");
  26. scanf("%d",&oopc);
  27. switch(oopc){
  28.  
  29. case 1:{
  30. do{
  31. printf("\nMenu Principal del Grupo 1\n");
  32. printf("Selecciona una opcion: \n1-Capturar datos \n2-Mostrar datos\n3-Ver el promedio de edades\n\n");
  33. scanf("%d",&opc);
  34.  
  35. switch(opc)
  36. {
  37. case 1:{
  38.  
  39. printf("Cuantos usuarios vas a registrar?");
  40. scanf("%d",&otro);
  41.  
  42. for(i=0;i<otro;i++){
  43. printf("\nNombre de la persona %d:\n",p);
  44. fflush(stdin);
  45. gets(a[i].nom);
  46. printf("\nCodigo escolar:\n");
  47. scanf("%d",&a[i].codigo);
  48. printf("\nCarrera:\n");
  49. fflush(stdin);
  50. gets(a[i].carr);
  51. printf("\nCuanto saco en su primer examen parcial:\n");
  52. scanf("%f",&a[i].p1);
  53. printf("\nCuanto saco en su segundo examen parcial:\n");
  54. scanf("%f",&a[i].p2);
  55. printf("Cuantas participaciones tuvo?");
  56. scanf("%f",&a[i].par);
  57. printf("Cuantas tareas tuvo?");
  58. scanf("%f",&a[i].tar);m++;p++;}
  59.  
  60. printf("Desea: \n1-Volver al menu\n2-Cerrar el programa");
  61. scanf("%d",&j);
  62.  
  63.  
  64. system("cls");
  65. L++;
  66. break;
  67. }
  68.  
  69.  
  70. case 2:{
  71. if(L!=0){
  72.  
  73. for(i=0;i<m;i++){
  74. 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);
  75.  
  76.  
  77.  
  78. }
  79.  
  80. printf("\nDesea: \n1-volver al menu\n2-Cerrar programa");
  81. scanf("%d",&j);}
  82.  
  83. if(L==0)
  84. { printf("No ha ingresado datos");
  85. printf("\nDesea: \n1-volver al menu\n2-Cerrar programa");
  86. scanf("%d",&j);}
  87.  
  88.  
  89.  
  90.  
  91. system("cls");
  92. break;
  93. }
  94. }
  95. }
  96. while(j==1);
  97. }
  98. }
  99. }
  100. while(z==1);
  101. }


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Ayuda con ciclo en C
Publicado por: engel lex en 20 Mayo 2017, 18:18 pm
siempre registras usuarios desde la posición 0, deberías usar un contador con los usuarios ingresados para saber donde agregar uno nuevo