Ayuda, Uso de Do y While

Iniciado por chewbaccaChaka, 23 Marzo 2018, 03:58 AM

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

chewbaccaChaka

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>


Citarint 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;
}

Kenji-chan

#1
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 (cpp) [Seleccionar]

char* calificaciones = "12a";

for(int i=0; i<3; i++){
 if((int)calificaciones[i] > 47 && (int)calificaciones[i] < 58){
   /*Calificaciones es un numero*/
 }else{
   /*Calificaciones no es un numero*/
   break;
 }
}



2) si es un numero de coma flotante
Código (cpp) [Seleccionar]

char* calificaciones = "12.5";

for(int i=0; i<4; i++){
 if(calificaciones[i] == '.'){
   /*Calificaciones es un numero entero*/
 }else{
   /*Calificaciones no es un numero entero*/
   break;
 }
}


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

Código (cpp) [Seleccionar]

int convertToInt(string num){
int ret, aux;

ret = (int)num[num.size()-1] - 48;
for(int i = num.size()-2, cont = 1; i>=0; i--, cont++){
aux = ((int)num[i] - 48) * eleva10(cont);
ret += aux;
}

return ret;
}

MAFUS

En verdad scanf te dice si lo ha conseguido ya que devuelve el número de conversiones con éxito realizadas:
#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);
}