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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 125
31  Programación / Programación C/C++ / Re: isdigit(); problema con validacion de caracteres en: 26 Marzo 2015, 08:05 am
Tienes varias opciones:

1. Leer la entrada del tirón como si fuese un string y comparar dígito a dígito:

Código
  1. std::string cad;
  2. cin >> cad;
  3. for( int i=0; i < cad.length( ); ++i )
  4. {
  5.  if ( !std::is_digit( cad[ i ] ) )
  6.  {
  7.    // ERROR
  8.  }
  9. }

2. Intentar leer directamente el número como tal y comprobar errores:

Código
  1. int numero;
  2. cin >> numero;
  3. if ( !cin )
  4. {
  5.  cin.clear( );
  6.  // ERROR: No es un número
  7. }
32  Programación / Programación C/C++ / Re: isdigit(); problema con validacion de caracteres en: 25 Marzo 2015, 08:20 am
Código
  1.    cout << "Bienvenido al programa para desplegar 10 numeros! \n"<<endl;
  2.    for (i=0; i<=9; i++)
  3.    {
  4.  printf("Ingrese un numero %i: ", i+1);
  5.  scanf("%i", &numeros[i]);

No tiene demasiado sentido que estés mezclando "cout" (propio de C++) con "printf" (herencia de C). Lo suyo, por claridad, es que usases todo el rato "cout". Lo mismo te digo con "cin" y "scanf".

Código
  1. flush(stdin);

Vaya manía con usar fflush sobre los buffer de entrada... fflush está pensado para ser utilizado con los buffer de salida, no con los de entrada. Usar fflush sobre un buffer de entrada va a dar un resultado indeterminado, es decir, puede que en tu casa funcione perfectamente y que delante del profesor falle sin remedio. Hay otras alternativas (aunque quizás no tan "bonitas") para vaciar el buffer de entrada... por ejemplo algo del tipo:

Código
  1. #include <limits>
  2.  
  3. cin.ignore(numeric_limits<int>::max());

Hablando de tu problema, lo que quieres es verificar que la tecla pulsada por el usuario se corresponde, efectivamente, con un número. Lo que tienes que hacer entonces es leer un carácter y verificar si dicho carácter se corresponde con un dígito o no. Algo tal que:

Código
  1. int numero = 0;
  2. char c;
  3. cin >> c;
  4. if ( is_digit( c ) )
  5. {
  6.  // Es un dígito numérico
  7.  numero = c - '0';
  8. }
  9. else
  10. {
  11.  // No es un dígito numérico
  12. }

Por cierto, el include a math.h... que usando la versión C++ debería quedar tal que "#include <cmath>", te sobra. No estás haciendo uso de ninguna función matemática que yo vea.

Un saludo.
33  Programación / Programación C/C++ / Re: Ayuda fflush en: 23 Marzo 2015, 12:56 pm
Tendrías que vaciar el buffer de entrada, ya que el usuario introduce los datos por teclado, usa fflush(stdin);

Saludos!

fflush no se debe usar para vaciar un buffer de entrada. fflush está diseñado para limpiar buffers de salida. En el caso de los buffer de entrada el resultado es indeterminado. Para más información, consulta este otro tema
34  Programación / Programación C/C++ / Re: maquina de bebidas en: 18 Marzo 2015, 11:23 am
No se hacen tareas. Puedes plantear dudas sobre tu código y te ayudaremos encantados.
35  Programación / .NET (C#, VB.NET, ASP) / Re: QUE ALGUIEN ME AYUDE.... en: 17 Marzo 2015, 16:31 pm
1. Este foro es de C y C++. Si tu duda trata sobre .NEt deberías preguntar en el foro correspondiente.

2. Windows es un sistema que funciona, por defecto, con ratón. Por este motivo SIEMPRE va a existir un ratón, otra cosa es que exista un dispositivo hardware que pueda mover dicho ratón. Si tu le preguntas a Windows por las coordenadas del ratón te va a devolver SIEMPRE unas coordenadas.

3. Dudo mucho que tengas que bajar a lenguaje ensamblador para hacer lo que quieres. Tu necesitas interactuar con la API de Windows, la cual está, en su inmensa mayoría, programada en C.

Te pongo un enlace que trata, en parte, el objetivo que tu persigues.

Un saludo.
36  Programación / Programación C/C++ / Re: Ayuda con un asunto en c++ en: 17 Marzo 2015, 16:24 pm
hace 1 año q no programo en c++...salte para C#.Net

El problema es que plantear una solución que no sólo no es válida, sino que además puede llevar a confusión no es demasiado ético.

Si tienes dudas, hay compiladores online en los que puedes poner tu fragmento de código y verlo funcionar (con ciertas limitaciones, pero ahí están). Sin embargo, lo dicho, no deberías poner una solución basada en un híbrido entre .NET y C++.

Por otro lado, como te ha comentado ivancea, el código debe estar decorado con las etiquetas correspondientes y no, no es un capricho, es una de las normas del foro, por lo que te agradeceríamos su cumplimiento.

Por otro lado, no hace falta ningún switch en el código. Para que el código funcione necesitas dos índices: Uno para mostrar el nombre y otro para mostrar la frase. El primero lo estas obteniendo con el for y es la variable "i", mientras que el segundo lo introduce el usuario en la variable "n":

cuando hable del switch decia hacer algo como

Código
  1. for(int i = 0; i <= names.length(); i++)
  2. {
  3.  cout << "Escriba el numero correspondiente con su nombre" << i  << "-" << names << endl;
  4.  cin >> n;
  5.  cout << msg[n] << names[i]; //Aqui en el post anterior me comi el names...sorry
  6. }
  7.  


pero por ahora dire q C++ tiene una libreria para generar numeros aleatorios en un intervalo tando de espacio como de tiempo

C++ tiene funciones para generar números aleatorios... y te los genera cuando se los pides. No se de dónde has sacado eso de que (si no te he entendido mal) tu le pides un número ahora y dentro de 4 segundos te lo facilita.

Y digo que tiene funciones porque en la versión C++11 el algoritmo de generación de números aleatorios es configurable (se puede elegir entre una serie de motores ya existentes o diseñar un motor propio). Pero aún así, lo dicho, el número te lo genera en cuanto lo pides.

seria mas cool porque a la persona no le saldria el mismo mensage siempre...que creen?

Pudiera ser, pero según lo que comenta el usuario, las respuestas deben ser fijas, es decir, para el nombre X debe aparecer el texto Y... los números aleatorios no tienen cabida en su ejercicio.
37  Programación / Programación C/C++ / Re: Ayuda con un asunto en c++ en: 17 Marzo 2015, 15:34 pm
Es to_string(), de la librería string.

Mejor que eso... en C++, los tipos básicos, entre los que se incluye int, no tienen métodos. i.ToString, siendo "i" un int, no va a compilar en ningúna versión de C++.
38  Programación / Programación C/C++ / Re: Error C++ ficheros y tildes en: 12 Marzo 2015, 15:47 pm
Si alguna vez has echado un vistazo a una tabla ASCII (ahora es un buen momento), verás que no hay símbolos con acentos, que no existe la 'ñ' ni tampoco la apertura de interrogación '¿'. Esto se debe a que ASCII emplea como base la escritura inglesa... y en inglés ni hay acentos, ni existe la 'ñ' ni tampoco la apertura de interrogaciones.

¿Qué tiene que ver esto con tu problema? sencillo. "string" es una clase que codifica las cadenas usando "char". Además, sucede que char es un tipo de 8 bits con signo, es decir, únicamente utiliza 7 caracteres para codificar. Esto te da 127 combinaciones posibles... y, para rematar, la tabla ascii tiene 127 caracteres. ¿Coincidencia? va a ser que no. Vamos, que en un char no puedes, por defecto, incluir ninguno de estos caracteres.

Lo mismo ahora te preguntas ¿Y cómo es que yo si puedo usar estos caracteres en mi ordenador? bueno, esto es debido a que tu sistema utiliza una codificación un tanto más elaborada. Las codificaciones más comunes son UTF-8 , unicode o alguna de las infinitas ANSI. Estas codificaciones permiten mostrar un número significativamente más elevado de símbolos, y para conseguir esto acaban usando más de un char por símbolo.

Por supuesto, estas codificaciones no son compatibles entre sí. Y esto se puede observar en algunas páginas de Internet, donde, de repente, aparecen caracteres raros. La única parte compatible entre estas codificaciones suelen ser los primeros 127 caracteres, que se suelen corresponder con los enumerados en la tabla ascii

Lo que vengo a decirte con esta parrafada es que, para tu caso, "string" se te queda pequeña. Posiblemente tengas que usar "wstring".

Y, bueno, claro, interpretar los caracteres según la codificación que tenga el fichero ('á' tiene codificaciones diferentes según sea UTF-8 o unicode).

Un saludo.
39  Programación / Programación C/C++ / Re: Necesito ayuda en este codigo please en: 12 Marzo 2015, 15:34 pm
NOTA: Sería interesante que tabulases el código de una forma coherente. Sería más fácil de leer.

Código
  1. if((*it) == borrar){      
  2.  vector<string>::iterator itTemp = --it;
  3.  NomEst.erase(itTemp);  
  4.  cout<<"\nNombre borrado con Exito\n\n";    
  5. }
  6. else
  7.  cout<<"\nEl nombre digitado no existe\n\n";

Si te das cuenta, para cada elemento de la lista haces lo siguiente: Si el elemento es el buscado, lo borro y muestro un mensaje, en caso contrario indico que el nombre no existe. Queda claro entonces que, para cada elemento de la lista, o te aparece un mensaje de borrado, o te aparece uno de no encontrado.

Lo que necesitas es que el algoritmo, de alguna manera, sea capaz de saber si durante la iteración se ha borrado algún elemento. En el supuesto de que no se haya encontrado ningún elemento entonces muestras el mensaje que indica que no se ha encontrado el elemento. Esto lo puedes hacer con una variable de tipo bool (el cómo implementarlo de momento corre de tu cuenta, además te sirve para practicar)

En el segundo caso que dices sucede exactamente lo mismo. Vas a sacar si o si un mensaje por cada elemento de la lista.

Por otro lado, date cuenta de que el algoritmo, tal y como está planteado, plantea que pueden existir nombres repetidos y que, por ejemplo, en el caso de una operación de borrado se han de borrar todos los nombres que coincidan con el introducido por el usuario. No digo que sea un error, ya que eso dependerá de los requisitos de la aplicación, es un por si acaso.

Un saludo
40  Programación / Programación C/C++ / Re: problemas con el else en: 12 Marzo 2015, 08:38 am
Código
  1. if( x == y )
  2.  x = 5;
  3.  y = 10;
  4. else
  5.  x = 0;

El código anterior reproduce el error que tu comentas. ¿Motivo? El if, al no tener llaves, únicamente afecta a la primera instrucción "x=5". La segunda instrucción, "y=10" queda fuera del if y, claro, el "else" ya no tiene un if al que emparejarse.
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 125
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines