elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda solo ingresar numeros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda solo ingresar numeros  (Leído 7,405 veces)
meaf75

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Duda solo ingresar numeros
« en: 10 Abril 2016, 17:53 pm »

Hola, estoy desarrollando una tarea y en esta me pide  ingresar un numero (todo bien hasta ahi) pero digamos la persona que esta usando el programa ingresa una letra le deberia decir: ingrese un numero pero en vez de eso cuando ingreso una letra me manda un error y se cierra, no se como poner que el valor a ingresar tiene que ser un numero y no una letra y si es una letra que lo devuelva al paso anterior hasta que ingrese un numero


En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #1 en: 10 Abril 2016, 18:16 pm »

Hola, meaf75. -
No tengo todavía mucha autoridad para responderte pero fíjate si este código te soluciona en parte tu problema, el único error es que si ingresas 12a te toma como válido el 12, tú dirás. -

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int main( void ){
  5. int numero = 0, ch, ok;
  6.  
  7. do{
  8. printf("\n Ingresa un numero entero (maximo %u)....: ", UINT_MAX);
  9. ok = scanf("%d", &numero) == 1 && numero >= 1 && numero <= UINT_MAX;
  10.  
  11. while ((ch = getchar()) != EOF && ch != '\n');
  12. }while(!ok);
  13.  
  14. printf( "\n Ingreso...: %d", numero );
  15.  
  16. return 0;
  17. }

Saludos.
Daniel



« Última modificación: 10 Abril 2016, 18:18 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
meaf75

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #2 en: 10 Abril 2016, 19:17 pm »

Huy me explicas jaja voy en primer semestre y no entiendo mucho lo que hay ahi
En línea

LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #3 en: 10 Abril 2016, 19:46 pm »

El código que ha subido NOB2014 está en C. Tiene que estar en c o en c++?
Si es en C, ya te explico el código.
En línea

meaf75

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #4 en: 10 Abril 2016, 21:47 pm »

Pues yo estoy trabajado en pseint pero aprendiendo en c++ lo puedo pasar a pseint
En línea

LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #5 en: 10 Abril 2016, 21:49 pm »

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5. string n;
  6. bool notnum = false;
  7. cout << "Ingresa un numero"  << endl;
  8. while(cin >> n){
  9. for(int i = 0; i < n.size() && !notnum; ++i){
  10. notnum = (n[i]< 48 || n[i]> 57);
  11. }
  12. if(notnum) cout << "Por favor, ingresa un numero correcto" << endl;
  13. else cout << "Numero correcto" << endl;
  14. }
  15. }

Mirate esto a ver si lo entiendes, si no enviame MP y te explico.
En línea

HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: Duda solo ingresar numeros
« Respuesta #6 en: 15 Abril 2016, 17:53 pm »

El ultimo codigo que se posteó (de @LaiaxanIV) esta escencialmente bien creo que por un boolean mal te queda en bucle infinito:

Citar
Ingresa un numero
uu
Por favor, ingresa un numero correcto
yy
Por favor, ingresa un numero correcto
55  <-- es correcto
Por favor, ingresa un numero correcto    <--  se vuelve a preguntar

Lo he modificado:

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. /*
  6. Lee un integer por teclado (C++)
  7. */
  8. int readint(string msg){
  9. string str_num;
  10. bool notnum = true;
  11.  
  12. cout << msg;
  13. cin >> str_num;
  14.  
  15. while(notnum){
  16. for(int i = 0; i < str_num.size();  i++){
  17. notnum = (str_num[i]< 48 || str_num[i]> 57);
  18.  
  19. if(notnum){
  20. cout << msg;
  21. cin >> str_num;
  22. break;
  23. }
  24. }
  25. }
  26.  
  27. return atoi(str_num.c_str());
  28. }
  29.  
  30.  
  31. int main(){
  32. int n;
  33. n = readint("Ingresa un numero: ");
  34. printf("Perfecto! el numero ingresado fue: %d",n);
  35.  
  36. return 0;
  37. }
  38.  


Ahora funciona bien y te aclaro que si el numero fuera un numero decimal (float) deberia aceptarse tambien el punto(.)
« Última modificación: 16 Abril 2016, 05:01 am por boctulus » En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: Duda solo ingresar numeros
« Respuesta #7 en: 16 Abril 2016, 04:54 am »

He intentado traducir el codigo del compañero (que he modificado ligeramente) de C++ a C pero me explota!

Alguien podria hacerlo por mi para ver en que fallo ?  en C++ me funciona pero en C tengo un problema al pasar un string y querer utilizarlo como const char *

Ojala me iluminen  ;D
En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #8 en: 16 Abril 2016, 06:21 am »

Hola mirate este ejemplo, en vez de que la funcion readInt  lea, valide y regrese la conversion de string a entero

Mejor me cree una funcion para validar si un array de char en C seria valido para poder convertilo en un entero

Mi funcion lo unico que hace es recorrer la cadena y usando las funciones isdigit que viene en la bibilioteca ctype de C comprobamos que cada caracter es un entero valido

Si encontramos algo raro la funcion retorna un cero(false) sino regresa un uno(True)

ejemplo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5.  
  6. int isInteger(char possibleNumber[]){
  7.  
  8.    while(*possibleNumber){
  9.        if(!isdigit(*possibleNumber))return 0;
  10.        possibleNumber++;
  11.    }
  12.    return 1;
  13. }
  14.  
  15. int main()
  16. {
  17.    //Primer ejemplo
  18.    char number[]="352353";
  19.  
  20.    if(isInteger(number))
  21.        printf("%s","Es numero valido");
  22.    else
  23.        printf("%s","no es un numero valido");
  24.  
  25.    //Segundo ejemplo
  26.    char number2[20];
  27.    printf("%s","\n\nIngrese un valor valido\n");
  28.    scanf("%s",number2);
  29.  
  30.  
  31.    if(isInteger(number2))
  32.       printf("%s","Es numero valido");
  33.    else
  34.       printf("%s","no es un numero valido");
  35.  
  36.    return 0;
  37. }
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
DanFire

Desconectado Desconectado

Mensajes: 24


Si quieres conocerme buscame...


Ver Perfil
Re: Duda solo ingresar numeros
« Respuesta #9 en: 16 Abril 2016, 12:32 pm »


Código:
int ingressaNumero() {

    int l(0);
    do {
        cout<< "Ingrese un numero : ";
        cin>>l;
        if (cin.fail()) {
            cout << "Te he pedido un numero , "
                 << "no tonterias!" << endl;

            cin.clear();

            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            l=-1;
        }
    } while(l<0);

    return l;


}



no te olvides de incluir <limits>
#include <iostream>
using namespace std;
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines