Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: hctr12 en 9 Julio 2014, 06:35 am



Título: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: hctr12 en 9 Julio 2014, 06:35 am
Buenas, tengo una consulta como puedo validar sólo números en mi trabajo.

Lo que quiero saber si hay opciones en las librerias que uso para lograrlo ya que en internet encuentro muchas formas pero no las entiendo, porque usan otras librerias y me desviaré mucho de lo que me piden.

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"

Código:
do
{
printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");
scanf("%d",&M); //
if(M == 1) //
{
printf("\n\n");
goto menu; //
}
else if(M == 0)
{
return 0;  
}
}while (M<0 || M>1);

Sólo he logrado usar el bucle while para que no usen números fuera de las opciones, pero aún tengo el problema con las letras.

Saludos


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: engel lex en 9 Julio 2014, 06:45 am
leelo como char y resolvería tu problema... el código solo tienes que modificar el tipo de variable de scanf a %c y M a char (con sus respectivas comparaciones)


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: hctr12 en 9 Julio 2014, 06:51 am
Entonces
Código:
char M;

do
{
printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");
scanf("%c",&M); //
if(M == 1) //
{
printf("\n\n");
goto menu; //
}
else if(M == 0)
{
return 0; 
}
}while (M<0 || M>1);


¿Cómo plantearías las comparaciones? Quiero validar sólo numeros para las opciones :( . Y me pierdo un poco


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: engel lex en 9 Julio 2014, 06:56 am
las comparaciones son iguales pero en comillas simples es decir

Código:
M == '1'

el char es visualmente interpretado como letra, pero el codigo lo entiende como numero (es basicamente lo que quiere decir que séa ascii) al ser interpretado como numero, las validaciones se hacen igual, para estos casos es lo más simple... por si a las dudas, busca la tabla ascii, ahí están representados


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: hctr12 en 9 Julio 2014, 07:47 am
Claro, cuando las reemplazo como dices llega a identificarse pero me imprime dos veces

Código:
printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");




Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: engel lex en 9 Julio 2014, 07:50 am
pasa tu sección código actual


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: hctr12 en 9 Julio 2014, 07:55 am
Es todo el codigo de mi trabajo, hasta ahora.

Lo llevo haciendo en Visual Express c++


Código:
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"

int main()
{
menu:
int OP;
char M; // VARIABLES DE MENU
int N,A,SN,MN=1; //VARIABLES DE LA FUNCION 1
int primero = 1, segundo = 0, tercero = 1, i=0, cant; // VARIABLES DE LA FUNCION 2

// INICIO DE LA FUNCION MENU-----------------------------------------------------------------------------------------------
do
{
printf("-------------------------------------------------------------------------------\n\n");
printf("\t\t\t\tMenu");
printf("\n\n");
printf("\t1. Suma de los cuadrados de los impares.\n\n");
printf("\t2. Mostrar la serie de Fibonacci.\n\n");
printf("\t3. Mover un movil.\n\n");
printf("\t4. Terminar.\n\n");
printf("\n\n");
printf("-------------------------------------------------------------------------------\n\n\t");
printf("Elija la funcion, segun su numero de orden: ");
scanf("%d",&OP);
printf("\n\n");

}
while (OP<1 || OP>4); //OP>=1 && OP<=4);
// FIN DE LA FUNCION MENU-----------------------------------------------------------------------------------------------



// INICIO DE LA FUNCION 1-----------------------------------------------------------------------------------------------
if (OP==1) //CONDICION PARA QUE DIRECCIONE A LA PRIMERA FUNCION
{

printf("\tIngrese la cantidad N de numeros impares ,al cuadrado, a sumar: ");
scanf("%d",&N); // scanf LEE EL ENTERO QUE SE INGRESARA EN LA VARIABLE N
printf("\n");
SN=(((N*2)+1)*(N*2)*((N*2)-1))/6;  // OPERACION PARA ENCONTRAR LA SUMA DE "N" NUMEROS IMPARES AL CUADRADO
printf("\tLa suma de los N numeros, impares al cuadrado es: %d",SN); // IMPRIME EL RESULTADO DE LA FORMULA

//*********************************************************************************************
do
{
printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");
scanf("%c",&M); //
if(M == '1') //
{
printf("\n\n");
goto menu; //
}
else if(M == '0')
{
return 0;  
}
}while (M=='0' || M=='1');


}
_getch();
return 0;
}


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: engel lex en 9 Julio 2014, 07:58 am
claro! mira la condicion del while! :s por qué la cambiaste?

tenias
Código:
(M<0 || M>1);
y ahora tienes
Código:
while (M=='0' || M=='1');

fijete que las condiciones son casi opuestas, porque en la original no podían ser 1 ni 0, ahora deben ser 0 y 1... deja las originales


---pd----

no uses conio.h está contra-recomendado... tampoco goto... para eso hay librerías standard y funciones


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: hctr12 en 9 Julio 2014, 08:01 am
Claro, estaba intentando otras opciones pero cuando regreso a
Código:
while (M<0 || M>1);

Me imprime dos veces
Código:
RETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR:
RETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ____ y recién para ingresar el valor y si el valor no es ni 1 ni 0, vuelve a imprimirse dos veces más y así...pero la validación si está correcta solo faltaría anular una impresión

PD1: EL CONIO NO LO PUEDO SACAR, POR EL _getch(); eso ya es capricho de mi docente.
PD2: QUÉ FUNCION PUEDE REEMPLAZAR A GOTO ?


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: engel lex en 9 Julio 2014, 08:04 am
sorry... copie y pegué el codigo... lo tienes como deberia ser?

Código:
while (M<'0' || M>'1');


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: hctr12 en 9 Julio 2014, 08:07 am
sorry... copie y pegué el codigo... lo tienes como deberia ser?

Código:
while (M<'0' || M>'1');

sigue imprimiendome dos veces.

PD2: QUÉ FUNCION PUEDE REEMPLAZAR A GOTO ?


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: engel lex en 9 Julio 2014, 08:30 am
no es "qué funcion puede reemplazar a goto XD es reemplazarlo con una función XD

es decir
Código
  1. #include<stdio.h>
  2.  
  3. using namespace std;
  4.  
  5. int menu() {
  6.    int OP;
  7.    char M; // VARIABLES DE MENU
  8.    int N, A, SN, MN = 1; //VARIABLES DE LA FUNCION 1
  9.    ///*******el resto de tu codigo***************/
  10.    do {
  11.        printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");
  12.        fflush(stdin);//limpiar buffer
  13.        scanf("%c", &M); //
  14.        if (M == '1') //
  15.        {
  16.            printf("\n\n");
  17.            return 1;
  18.        } else if (M == '0') {
  19.            return 0;
  20.        }
  21.    } while (M < '0' || M > '1');
  22. }
  23.  
  24. int main() {
  25.  
  26.    while (menu() == 1);
  27.    return 0;
  28. }


Título: Re: [AYUDA]C++ / VALIDAR SOLO NUMEROS SEGUN MI TRABAJO
Publicado por: leosansan en 9 Julio 2014, 15:16 pm
sigue imprimiendome dos veces.
.........................................

El problema de imprimir dos veces es indicativo que hay que realizar una limpieza del bufffer, cosa que puedes conseguir con:

Código
  1. while (getchar() !='\n' );

.......................................
PD2: QUÉ FUNCION PUEDE REEMPLAZAR A GOTO ?


Como te comentó engel lex es usar una función que bien podría ser menu(),. Te indico como podría ser y además como vas a tener 4 casos, si no más, sería aconsejable el uso de un switch para  no liarla con un porrón de if eslse:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void menu();
  5.  
  6. int main(){
  7.  menu ();
  8.  system("pause");
  9.  return 0;
  10. }
  11.  
  12. void menu(){
  13.  char OP;
  14.  char M; // VARIABLES DE MENU
  15.  .............................................
  16.  
  17.  // INICIO DE LA FUNCION MENU
  18. ....................................................
  19.    do
  20.  {
  21. .....................................................
  22.    scanf("%c",&OP);
  23.    while (getchar() !='\n' ); /* <== !!!!!!!!!!!!!!!!!!!!!!!!*/
  24.      printf("\n\n");
  25.  
  26.  }
  27.  while (OP<'1' || OP>'4');
  28.  
  29. ........................................................
  30.  
  31.  switch (OP){ //CONDICION PARA QUE DIRECCIONE A LA PRIMERA FUNCION
  32.  
  33.    case '1':
  34.      printf("\tIngrese la cantidad N de numeros impares ,al cuadrado, a sumar: ");
  35.      scanf("%d",&N); // scanf LEE EL ENTERO QUE SE INGRESARA EN LA VARIABLE N
  36.      while (getchar() !='\n' );
  37. .............................................................................
  38.  
  39.        do
  40.        {
  41.            printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");
  42.            scanf("%c",&M); //
  43.            if(M == '1') //
  44.            {
  45.            printf("\n\n");
  46.            while (getchar() !='\n' );  /* <== !!!!!!!!!!!!!!!!!!!!!!!!*/
  47.            menu(); /* <== !!!!!!!!!!!!!!!!!!!!!!!!*/
  48.            }
  49.            else if(M == '0')
  50. ...............................................................
  51.        }while (M<'0' || M>'1');
  52.  }
  53. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)