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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  atsInNum()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: atsInNum()  (Leído 3,479 veces)
@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
atsInNum()
« en: 5 Junio 2010, 06:16 am »

Empezamos a crear la ats, por fin...

Y bueno, estoy con la 1º función, y por mensajería, discutía amistosamente con nicolas_cof, sobre como implementar la siguiente función:

Código
  1.  
  2. // STDIO.H
  3.  
  4. /*
  5.  * By: Sergio López & elhacker.net- 5/6/2010
  6.  * GNU GPLv3
  7.  *
  8.  * Function returns an integer
  9.  *
  10.  * Syntax example: var =atsInNum(1, 6);
  11.  * Returns a value between 1 and 6
  12.  */
  13.  
  14. int atsInNum(int ATSMIN, int ATSMAX)
  15. {
  16. int atsint =0;
  17.  
  18. do
  19. {
  20. fscanf(stdin, "%d", &atsint);
  21. } while (atsint<=ATSMIN || atsint>=ATSMAX);
  22.  
  23. return atsint;
  24. }
  25.  
  26.  

Varias cosas:

* nicolas_cof opina que el switch con las opciones de texto sobra, pues se sale del objetivo de la función. Yo opino que es un extra a la hora de usarla, ya que te ahorras un par de lineas gracias a ATSOP.

* No me gusta demasiado usar fscanf, así que pensé en usar fgetc y atoi. Espero opiniones al respecto.

Espero que comentéis sobre estos 2 asuntos, y aportéis nuevas ideas, reportéis errores, etc. ^^

http://foro.elhacker.net/programacion_cc/libreria-t294373.0.html


« Última modificación: 5 Junio 2010, 07:07 am por Daemon Freedom » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: atsInNum()
« Respuesta #1 en: 5 Junio 2010, 06:42 am »

Dos sentencias en una se ven horribles.

Y no le veo propósito práctico a la función.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: atsInNum()
« Respuesta #2 en: 5 Junio 2010, 06:44 am »

La verdad es que el propósito de la función esta como a medias. Tengo que preguntar cual es el propósito que intentaste darle a la función, ya que no me queda claro todavía para que la queres utilizar específicamente.

No entiendo la utilidad del tercer parámetro. Primero, estoy de acuerdo con Nicolas_cof, la función debe tener un objetivo primario. Si lo analizas, el código de los mensajes ocupa mas que la función en si, lo cual no tiene mucho sentido.
En cuanto al tercer parámetro, supongo que es la opción "idioma" lo cual me parece bastante innecesario y ademas esta mal codificado debido a estos 2 detalles:

Si el switch no tiene un break, si ingresas un 1 en el tercer parámetro se van a mostrar los dos mensajes.

El segundo detalle esta relacionado con el anterior, el texto carece de formato, por lo tanto se veria algo como:

Citar
Enter a valueIntroduce un valor

Lo cual es incorrecto.

Ahora bien, en cuanto al propósito general de la función, he de decirte que no tiene mucho sentido. Vamos a analizarla por partes:

Código
  1. do
  2. {
  3. fscanf(stdin, "%d", &atsint);//Lees un entero
  4. } while (atsint<=ATSMAX && atsint>=ATSMIN);//Mientras sea menor o igual que MAX Y mayor o igual que MIN.
  5.  
  6. return atsint; //retorno el primer numero que ingrese que NO sea menor o igual que MAX Y mayor o igual que min

Y ahora veamos los comentarios:

Código
  1. * Function returns an integer if it works
  2. *
  3. * Syntax example: var =atsInNum(1, 6, 1);
  4. * Returns a value between 1 and 6, displaying a message

Entenderás que no corresponde una cosa con la otra por lo tanto se torna bastante confuso.

Despacio y con análisis que van a salir cosas buenas, no apurarse.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: atsInNum()
« Respuesta #3 en: 5 Junio 2010, 06:49 am »

Por partes, el propósito de la función, es que esta devuelva un valor entero, introducido por teclado, que esté comprendido entre MIN y MAX, ambos incluidos.

¿Qué utilidad le puedes dar? Es una cosa que uso mcuho en clases, sobretodo para menús estilo switch.

Quedaría mas o menos...

Código
  1.  
  2. switch(atsInNum(0,10))
  3. {
  4. ...
  5. }
  6.  
  7.  

Así aseguramos que el valor introducido esté entre 0 y 10.

La parte de los idiomas, ha sido eliminada, ya no causará mas problemas  ::)
« Última modificación: 5 Junio 2010, 06:51 am por Daemon Freedom » En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: atsInNum()
« Respuesta #4 en: 5 Junio 2010, 06:52 am »

Claro pero vos retornas precisamente lo contrario, porque solo salís del do while cuando ingresas un entero que no esta comprendido entre esos valores.
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: atsInNum()
« Respuesta #5 en: 5 Junio 2010, 06:52 am »

Claro pero vos retornas precisamente lo contrario, porque solo salís del do while cuando ingresas un entero que no esta comprendido entre esos valores.

Ya he sustituido && (y) por || (o)
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: atsInNum()
« Respuesta #6 en: 5 Junio 2010, 06:59 am »

Y ahora te quedas en un bucle infinito. Podes ingresar números toda la vida que siempre se va a cumplir la condición.


func(0,5)

ingreso 5;

es mayor o igual que 0? si
o
es menor o igual que 5? si

ingreso 20;

es mayor o igual que 0? si
o
es menor o igual que 5? no


De cualquiera de las dos formas el ciclo no termina.
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: atsInNum()
« Respuesta #7 en: 5 Junio 2010, 07:08 am »

Por partes, el propósito de la función, es que esta devuelva un valor entero, introducido por teclado, que esté comprendido entre MIN y MAX, ambos incluidos.

¿Qué utilidad le puedes dar? Es una cosa que uso mcuho en clases, sobretodo para menús estilo switch.

Quedaría mas o menos...

Código
  1.  
  2. switch(atsInNum(0,10))
  3. {
  4. ...
  5. }
  6.  
  7.  

Así aseguramos que el valor introducido esté entre 0 y 10.

La parte de los idiomas, ha sido eliminada, ya no causará mas problemas  ::)

Mmmm pero esto no seria trabajo del usuario, y vos simplemente controlarlo de que lo haga bien :P...

No lo veo para definir toda una funcion que haga eso...

Veo redundante esto...

Código:
int atsint = 0;

ya que despues le volves a asignar un valor a atsint

Salu10.
« Última modificación: 5 Junio 2010, 07:15 am por nicolas_cof » En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: atsInNum()
« Respuesta #8 en: 5 Junio 2010, 07:09 am »

Corregido el maldito error de máximos y mínimos. Gracias Littlehorse por hacerme pensar XD  ;-)
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: atsInNum()
« Respuesta #9 en: 5 Junio 2010, 07:32 am »

De nada, ten en cuenta que de esa forma no incluís el mínimo ni el máximo como valido. Es decir (1,6) equivale a números entre 2 y 5 incluidos.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

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