• Domingo 19 de Mayo de 2024, 09:28

Autor Tema:  Re: Leer un numero ( scanf )  (Leído 6450 veces)

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« en: Miércoles 19 de Noviembre de 2003, 16:58 »
0
La pregunta es:

Yo tengo un programa y necesito leer un numero, puedo usar por ejemplo el scanf de esta forma:

int num;

printf("Inserta un numero: ");
scanf("%d",&num);

Bien, ahora imaginemos que queremos imprimir el numero que hemos metido sumado +10:

int num;

printf("Inserta un numero: ");
scanf("%d",&num);

printf("La suma es: %d",num+10);

De acuerdo, ¿ y si el usuario le da por NO PONER UN NUMERO y me pone una letra ?


#include <stdio.h>
#include <conio.h>



void main()
{

int num;

printf("Inserta un numero: ");
scanf("%d",&num);

printf("La suma es: %d",num+10);
}


El resultado que obtenemos al poner una letra es el mismo siempre ( 1450 ).

Ahora biene el preguntón: Como hago para que en caso de que el usuario ponga una letra,simbolo o cualkier cosa que no sea un numero... se repita el programa, es decir, que vuelva a preguntar por un nuevo numero pues las letras,simbolos y demas no valen para usar el programa.

¿ Alguien sabe como hacerlo ?


GRACIAS !

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Leer un numero ( scanf )
« Respuesta #1 en: Miércoles 19 de Noviembre de 2003, 21:49 »
0
Ahh si perdon me apresure un poco a responder...
bueno no dispongho de tiempo porque estoy en horario de trabajo,
prueba con la funcion kbhit y con la funcion bioskey utiliza la dos.h.

Es facil creeme..
si no lo logras corregir, tal vez te ayude mas el fin de semana.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #2 en: Miércoles 19 de Noviembre de 2003, 21:58 »
0
perdona pero eso que has puesto debe de estar mal porque es un bucle infinito. Yo lo he compilado y estaba bien y al darle al "run" puse de numero una "k" y me salio el bucle infinito:(

nose si sera facil pero llevo comiendome el coco mucho tiempo !! y nadie sabe solucionarlo !!!

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #3 en: Miércoles 19 de Noviembre de 2003, 22:00 »
0
por cierto, el numero no tiene porque estar entre 0 y 9, el usuario te podria poner el numero 982173982173918723:P

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #4 en: Jueves 20 de Noviembre de 2003, 03:30 »
0
Pero tiene que ser siempre con la funcion "scanf()" o con otra u otras

por ejemplo leer el teclado cada tecla  a la ves y verificar si es un numero o letra.

Si dices que cuando ingrasas una letra "una letra es el mismo siempre ( 1450 ).
" entoces podrias ponerlo en un cliclo
do
while
y comparar si el valor leido es diferente al que se tienen cuando se lee una letra (pero en ese caso si se ingresa justo ese numero seria una ecepcion)

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #5 en: Jueves 20 de Noviembre de 2003, 22:49 »
0
EDITADO: Super_G ya lo he probado y no funciona:( da bucle infinito:(


Super_G buena idea;) probare a ver si puedo hacer algo con eso... de todas formas ya te digo k no es necesario scanf puede ser otra funcion de leer numeros SOLO numeros:)

gracias y poner mas cosas si se os ocurre algo!;)

EDITADO: Super_G ya lo he probado y no funciona:( da bucle infinito:(


#include <stdio.h>
#include <conio.h>

void main()
{
int num,num1;

do{
printf(" Insert the number: ");
scanf("%d",&num);
num1=num;
}while (num1==1440);
printf("The number is: %d",num1);
}

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #6 en: Jueves 20 de Noviembre de 2003, 23:16 »
0
#include <stdio.h>
#include <conio.h>



void main()
{


int num=0;

printf(" Inserta el numero: ");
int res = scanf("%d",&num);
   if (res==1)
   {
      printf("El numero es: %d",num);
   }
if (res!=1)
{
printf(" Inserta solo numeros!!! ( not letras!!! ): ");
scanf("%d",&num);
}

printf("nres: %d",res);
}

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #7 en: Viernes 21 de Noviembre de 2003, 00:00 »
0
Aqui te expongo una solución:

void main()
{
int num;
char num2;

do{
printf("nIntroduce numero: ");
scanf("%d",&num);
scanf("%c",&num2);
}while(num2>='a' && num2 <='z');
printf("%d",num+10);
}

Como verás al declarar un char eres capaz de saber si se ha introducido una letra o palabra o no, por tanto solucionarías el problema.  Un saludo.
:adios:
No hay tonto más molesto que el ingenioso.

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #8 en: Viernes 21 de Noviembre de 2003, 13:44 »
0
carmamezo pero eso funcionaria si fuese 2 digitos, ke me dices si el usuario pone "4f" o "87e7dfs98sdff"

sabes lo k kiero decir ? sigue sin ir !!!!

nadie ve la solucion:(:(

gracias de todos modos;)

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #9 en: Viernes 21 de Noviembre de 2003, 17:37 »
0
Creo que te equivocas o yo no te entiendo, pues a mi me va perfecto... en el momento que se introduce una letra el programa pide que se repita la inserción, se puede mejorar el código haciendo un fflush(stdin) después del scanf último.  Pero si se introduce un 3425asdf pide un nuevo valor, por tanto no deja pasar ninguna letra esté en la posición que esté.
No hay tonto más molesto que el ingenioso.

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #10 en: Viernes 21 de Noviembre de 2003, 17:41 »
0
Pro cierto no había caido en las mayusculas... estaría perfecto con un:
a= tolower(a);
después del scanf("%c",&num2);
Un saludo.
No hay tonto más molesto que el ingenioso.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #11 en: Viernes 21 de Noviembre de 2003, 22:49 »
0
Aqui tengo el codigo que no utiliza scanf sino lo hace caracter por caracter
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #12 en: Viernes 21 de Noviembre de 2003, 22:55 »
0
cuando leo con scanf(), y le pongo una letra no la toma encuanta, si teclo una letra y despues un numero ó solo letras retorna 0 en la variable leida; si empieso con numeros y luego con letras solo retorna los primeros numeros hasta donde se pulso el caracter; si despues de teclear numeros y luego una o mas letras y despues numeros sucede lo mismo que el anterior;;(utilizo el Borlandc++ 3.11)


En resumen cuando lee letras no retorna 1450

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #13 en: Domingo 23 de Noviembre de 2003, 01:01 »
0
Citar
Originalmente publicado por Super_G
Aqui tengo el codigo que no utiliza scanf sino lo hace caracter por caracter


esta es la solucion perfecta, solo lee numeros que es lo que yo queria.
Muchas gracias por todo:) ahora me estudiare que es lo que hace realmente el codigo.:)

Gracias !

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #14 en: Lunes 24 de Noviembre de 2003, 04:25 »
0
"nbo hay de queso no mas de papa"

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #15 en: Viernes 28 de Noviembre de 2003, 13:20 »
0
si pos .... ahora resulta que han sacado un fallo a ese codigo que es... no sepuede poner numeros negativos y no se puede usar el "retroceso" para borrar en caso de que te equiboques ...

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #16 en: Viernes 28 de Noviembre de 2003, 16:40 »
0
pero tiene solucion solo hay que hacer mas comprobaciones

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Leer un numero ( scanf )
« Respuesta #17 en: Viernes 28 de Noviembre de 2003, 16:57 »
0
Hola a todos.

La función scanf retorna el número de valores leidos con éxito, por lo que basta comprobar este valor (debe ser 1 en este caso) para saber si el usuario ha introducido un entero. Un ejemplo de aplicación de esto sería:

 
Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. void main()
  5. {
  6.     int num;
  7.     int res;
  8.  
  9.     printf("Escribe un numero:n");
  10.  
  11.     fflush(stdin);
  12.     res = scanf("%d", &num);
  13.     while (res == 0)
  14.     {
  15.         printf("Por favor, introduzca un numero valido.n");
  16.         fflush(stdin);
  17.         res = scanf("%d", &num);
  18.     }
  19.  
  20.     printf("El numero es: %dn", num);
  21. }
  22.  
  23.  

Espero que esto te sirva de ayuda. Un saludo.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #18 en: Domingo 30 de Noviembre de 2003, 04:14 »
0
Eso parece mejor!!

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Leer un numero ( scanf )
« Respuesta #19 en: Domingo 30 de Noviembre de 2003, 15:42 »
0
si pero solo "parece" ... sigue sin funcionar como debe de funcionar. Si introduces "5dfs35" te imprime 5... deberia dar "error" pues has introducido un caracter.


PD: hmmmm ¿ y si mezclo los 2 codigos que me habeis pasado y pido carcater por caracter tal y como era el codigo anterior y luego uso el segund codigo para validar ese caracter ?

voy a probar :D gracias!