Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chewbaccaChaka en 23 Marzo 2018, 03:58 am



Título: Ayuda, Uso de Do y While
Publicado por: chewbaccaChaka en 23 Marzo 2018, 03:58 am
Buenas...
Tengo una duda, tengo un programa que pide calificaciones las que quiera ingresar el usuario, hasta esa parte no tengo ningun problema al igual que preguntarle si desea ingresar mas. dandole la opcion de terminar y arrojar reportes.
El problema esta en que no se como hacer que se valide la calif que ingresa y que si es un dato fuera de la validacion le vuelva a pedir los datos.
#include <stdio.h>
#include <stdlib.h>


Citar
int main()

{
int n,opcion,contador=0, suma=0;
float promedio,aprobados,reprobados;
      
   
do{
 {
   printf("Ingrese una calificacion \n");
   scanf("%d",&n);
   contador=contador+1;
   promedio=suma/contador;      
   printf("Presione 1 si desea continuar. Presione otro numero para salir");
   scanf("%d",&opcion);
   
      }   
   
} while (opcion==1);

printf("Saliste del programa porque presionaste otro numero \n");
printf("El porcentaje de alumnos aprobados es %f \n",aprobados);
printf("El porcentaje de alumnos reprobados es %f \n",reprobados);
printf("Ingresaste %d calificaciones \n",contador);
printf("El promedio del grupo es %f \n",promedio);
printf("El indicador del grupo es: %d \n (1:Positivo) (2:negativo)");
         

            
 return 0;
}
Código
  1.  


Título: Re: Ayuda, Uso de Do y While
Publicado por: Kenji-chan en 23 Marzo 2018, 18:58 pm
lo que puedes hacer es tratarlo como cadenas de texto de ese modo podes verificar las siguientes condiciones:

1)si es un numero buscamos en todas las posiciones si esa coincidencia es un numero o no
Código
  1. char* calificaciones = "12a";
  2.  
  3. for(int i=0; i<3; i++){
  4.  if((int)calificaciones[i] > 47 && (int)calificaciones[i] < 58){
  5.    /*Calificaciones es un numero*/
  6.  }else{
  7.    /*Calificaciones no es un numero*/
  8.    break;
  9.  }
  10. }
  11.  
  12.  

2) si es un numero de coma flotante
Código
  1. char* calificaciones = "12.5";
  2.  
  3. for(int i=0; i<4; i++){
  4.  if(calificaciones[i] == '.'){
  5.    /*Calificaciones es un numero entero*/
  6.  }else{
  7.    /*Calificaciones no es un numero entero*/
  8.    break;
  9.  }
  10. }
  11.  

y por ultimo hacemos una función que lo convierta de texto a entero

Código
  1. int convertToInt(string num){
  2. int ret, aux;
  3.  
  4. ret = (int)num[num.size()-1] - 48;
  5. for(int i = num.size()-2, cont = 1; i>=0; i--, cont++){
  6. aux = ((int)num[i] - 48) * eleva10(cont);
  7. ret += aux;
  8. }
  9.  
  10. return ret;
  11. }
  12.  


Título: Re: Ayuda, Uso de Do y While
Publicado por: MAFUS en 23 Marzo 2018, 22:03 pm
En verdad scanf te dice si lo ha conseguido ya que devuelve el número de conversiones con éxito realizadas:
Código:
#include <stdio.h>

int main() {
    int n;

    if(scanf("%i", &n) == 0)
        puts("Error, no es un número");
    else
        printf("El número es %i", n);
}