Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con ciclo While

Estas en el tema de Problemas con ciclo While en el foro de C/C++ en Foros del Web. Hola tengo un problema con este programa, tengo que validar los datos de entrada de modo que solo se puedan ingresar numeros en un rango ...
  #1 (permalink)  
Antiguo 04/03/2013, 15:14
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 11 años, 5 meses
Puntos: 2
Problemas con ciclo While

Hola tengo un problema con este programa, tengo que validar los datos de entrada de modo que solo se puedan ingresar numeros en un rango de 0 - 100, todo eso me funciona, en la parte de

printf("\nIngrese nombre del estudiante: ");
gets(NomAlumno);

no se porque pasa de un solo, osea no lee NomAlumno.

y tambien el proceso de:
promedio=(float)(nota1+nota2+nota3)/3;
no hace este proceso no lo calcula y no se porque?

Que tengo malo?


Código C:
Ver original
  1. #include<stdio.h>
  2. #include<windows.h>
  3. main()
  4. {
  5.     int C=0,alumnos=0,nota1,nota2,nota3;
  6.     float promedio;
  7.     char NomAlumno[40],NomClase[40],*msj;
  8.  
  9.     printf("\tPROMEDIO DE NOTAS");
  10.     printf("\n\t******** ** *****");
  11.  
  12.     printf("\n\nIngrese el nombre de la clase: ");
  13.     gets(NomClase);
  14.    
  15.     while(alumnos<=0)
  16.     {
  17.         printf("\nIngrese cantidad de alumnos: ");
  18.         scanf("%d",&alumnos);
  19.         if (alumnos<=0)
  20.             printf("\nIngrese numeros validos");
  21.     }
  22.    
  23.    
  24.     while(C<alumnos)
  25.     {
  26.         C++;
  27.         nota1=110;
  28.         nota2=101;
  29.         nota3=102;
  30.  
  31.         printf("\nIngrese nombre del estudiante: ");
  32.         gets(NomAlumno);
  33.        
  34.        
  35.         while(nota1<0 || nota1>100)
  36.         {
  37.             printf("\nIngrese nota 1: ");
  38.             scanf("%d",&nota1);
  39.             if(nota1<0 || nota1>100)
  40.                 printf("Ingrese valores entre 0 - 100");
  41.  
  42.  
  43.         }
  44.  
  45.         while(nota2<0 || nota2>100)
  46.         {
  47.             printf("\nIngrese nota 2: ");
  48.             scanf("%d",&nota2);
  49.             if(nota2<0 || nota2>100)
  50.                 printf("Ingrese valores entre 0 - 100");
  51.  
  52.  
  53.         }
  54.         while(nota3<0 || nota3>100)
  55.         {
  56.             printf("\nIngrese nota 3: ");
  57.             scanf("%d",&nota3);
  58.             if(nota3<0 || nota3>100)
  59.                 printf("Ingrese valores entre 0 - 100");
  60.  
  61.  
  62.         }
  63.  
  64.  
  65.        
  66.         promedio=(float)(nota1+nota2+nota3)/3;
  67.  
  68.         if(promedio<=70)
  69.             msj="Reprobado";
  70.         else
  71.             msj="Aprobado";
  72.  
  73.         printf("\nPROMEDIO ALUMNO %d",C);
  74.         printf("\nNombre: %s",NomAlumno);
  75.         printf("\nPromedio: %.2lf",&promedio);
  76.         printf("\nEstado: %s\n",&msj);
  77.         }
  78.  
  79.  
  80.  
  81.     return 0;
  82.     }
  #2 (permalink)  
Antiguo 05/03/2013, 17:11
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 10 años
Puntos: 94
Respuesta: Problemas con ciclo While

Primero lo facil:
Cita:
promedio=(float)(nota1+nota2+nota3)/3;
no hace este proceso no lo calcula y no se porque?
Sí lo calcula bien solo q estas usando mal el printf; al imprimir promedio y msj no tenes que anteponer el "&", esta demas

Ahora digamos lo dificil:
Cita:
no se porque pasa de un solo, osea no lee NomAlumno.
Esto se debe al ENTER que queda en el bufer del teclado, es decir al ingresar el numero de alumnos seguido oprimis el enter. Entonces el numero es usado por scanf pero el ENTER queda almacenado en el bufer. Cuando gets quiere leer el nombre agarra el ENTER sin dejarte ingresar nada
Para q esto no suceda tenes que limpiar el bufer con:
Código C:
Ver original
  1. while(getchar()!='\n');


SAludos

PD: el bucle tiene que ir abajo de
Código C:
Ver original
  1. while(C<alumnos)
  2.     {
  3. while(getchar()!='\n');
  4. /* .........*/
  #3 (permalink)  
Antiguo 11/03/2013, 13:34
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: Problemas con ciclo While

Te lo agradezco muschisimo!!!!!!!!

Perdon por contestar tarde

Etiquetas: funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:59.