Dev - C++ - Validar ENTER en C pero como tipo entero

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Validar ENTER en C pero como tipo entero

Publicado por Detectorup (2 intervenciones) el 18/12/2018 09:00:59
Lo unico que quiero es que ingresar un NUMERO ENTERO
int n;
si n>18 --> Printf("Eres mayor de edad");
si n<18 --> Printf("Eres menor de de edad");
si pulsas ENTER --> printf("INgresastes ENTER ..saliendo del Programa");

Como detectar ENTER pero sin definir como tipo de variable char ,
Yo se que ENTER = '\n' pero eso se con variable definida en tipo char
Ya probe con scanf , getch(), getchar() todos necesitan que defina mi variable como char
pero yo necesito que mi variable sea int porque hay desigualdades


uso el IDE dev-c++ 5
mi ejemplo , falla porque cuando pulso enter lo unico que hace es saltar una linea por cada ENTER y no sale
nada mas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
int main()
{
 
int edad;
printf("INGRESAR TU EDAD (entero mayor que cero) : \n");
scanf("%d",&edad);
fflush(stdin);
 
if ( edad<18)
   printf("No puedes votar eres menor de edad\n");
else if ( edad >=18)
   printf(" Si puedes Votar  , eres mayor de edad 18\n");
else  ( edad = '\n')
   printf(" Pulsaste ENTER , saliendo ..\n");
system("pause");
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Validar ENTER en C pero como tipo entero

Publicado por Thanatos (199 intervenciones) el 18/12/2018 16:50:43
Puedes usar una cadena de caracteres para almacenar la entrada y luego convertirla en un valor entero para hacer las comparaciones.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>   // printf(), scanf(), fgets()
#include <stdlib.h>  // system(), atoi()
#include <string.h>  // strcspn()
 
int main(void)
{
    char cadena[4];
 
    printf("Ingresa tu edad (entero mayor que cero)\nedad = ");
    fgets(cadena, sizeof cadena, stdin);
 
    if (cadena[0] == '\n')
    {
        printf("Pulsaste 'enter', saliendo...\n");
    }
    else
    {
        cadena[strcspn(cadena, "\r\n")] = '\0';
        int edad = atoi(cadena);
 
        if (edad >= 0 && edad < 18)
        {
            printf("No puedes votar, eres menor de edad.\n");
        }
        else if (edad >= 18)
        {
            printf("Puedes votar, eres mayor de edad.\n");
        }
        else
        {
            printf("Ingresaste una edad fuera del rango.\n");
        }
    }
 
    system("pause > nul");
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Validar ENTER en C pero como tipo entero

Publicado por Detectorup (2 intervenciones) el 20/12/2018 03:32:17
Muchas Gracias ,
Una consulta esta linea
cadena[strcspn(cadena, "\r\n")] = '\0';

porque es necesaria

veo que el valor de strcspn(cadena, "\r\n") es el valor del numero de caracteres que ingreso , si ingreso 25 seria el valor de 2
osea estarias definiendo cadena[2]='\0' pero con que proposito ?

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Validar ENTER en C pero como tipo entero

Publicado por Thanatos (199 intervenciones) el 20/12/2018 12:42:33
La función atoi() convierte una cadena de caracteres (string), en un dato de tipo entero (int).

Un string en lenguaje C, es un array de caracteres que finaliza con el carácter nulo '\0'.

La función strcspn(string1, string2), cuenta la cantidad de caracteres de string1 hasta encontrar la primera coincidencia de string2. En este caso, hasta encontrar el carácter '\r' (retorno de carro, carriage return, CR) o hasta encontrar el carácter '\n'. Si no encuentra ninguno se detiene en el carácter nulo '\0'.

Cuando se usa la función fgets() para leer la entrada del usuario, también queda almacenado en el array el carácter '\n' (el enter que presiona el usuario para ingresar los datos). Por ejemplo, si el usuario ingresa la edad 25, se almacenarán 3 caracteres en el array:

1
2
3
cadena[0] = '2';
cadena[1] = '5';
cadena[2] = '\n';

La línea:

1
cadena[strcspn(cadena, "\r\n")] = '\0';

Se encarga de reemplazar el carácter '\n' con el carácter '\0', de esa manera el array de caracteres se puede usar como string y puede pasarse como argumento de la función atoi().

Normalmente esa línea (u otra que cumpla esa función) se suele escribir luego de usar fgets(), pero en este caso, se necesitaba conservar el carácter '\n' en el array para verificar si el usuario presiona enter sin escribir la edad (línea 12).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar