• Lunes 13 de Mayo de 2024, 03:33

Autor Tema:  Cin Misterioso  (Leído 1276 veces)

areku

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Cin Misterioso
« en: Martes 29 de Noviembre de 2005, 00:50 »
0
pues bueno... Tengo un problema al momento de hacer un llamado a funcion..

Imprimo el menu en pantalla, capturo la opcion y mando llamar a la funcion ke corresponde..

La funcion captura una cadena de caracteres y lod eja de hacer hasta ke le presiones enter...

Mi problema es que despues de elegir en el menu y mandar llamar la funcion correspondiente, automaticamente se presiona el enter... y no me deja capturar..

Aqui les dejo el codigo para ver si alguien me ayuda :)

Deje solo el codigo suficiente para ke funcione....

thx
Código: Text
  1.  
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <conio.h>
  6. #define multiplo 256
  7.  
  8. using namespace std;
  9.  
  10. void escribir_msg()
  11. {
  12.    char  msg[255],msg_decodificado[255],*msg_decodif,resp;
  13.    int msgascii[255],letra, *msg_codif;
  14.    int longitud, ch,i,guardar=0,*p,opcion=0,OpMenu;
  15.  
  16.  
  17.    cout <<"Escribe el mensaje a codificar:";
  18.    for( i = 0; (i < 255) &&  ((ch = getchar()) != EOF) & (ch != '\n'); i++ ) //permite meter cadenas con espacio
  19.    {
  20.       msgascii[i]=ch;//mete el valor en ascii
  21.       msg[i] = (char)ch; //mete el valor convertido a caracter
  22.    }
  23.    msg[i] = '\0';//colocamos el fin de cadena
  24.  
  25.    longitud = strlen(msg); //contamos la longitud del msg
  26.    puts("\nmsg:");
  27.    for(i=0;i<longitud;i++)
  28.    {
  29.       cout<<msg[i];
  30.    }
  31. }
  32.  
  33.  
  34. main()
  35. {
  36.  
  37.       int opmenu,opcion;
  38.       system("cls");
  39.       cout<<"Seleccine una Opcion\n";
  40.       cout<<"1) Escribir Mensaje para Encriptar\n";
  41.       cout<<"2) Leer de un archivo el Mensaje para Desencriptar\n";
  42.       cout<<"3) Salir\n";
  43.       cin>>opmenu;
  44.       if(opmenu==1)
  45.       {
  46.          
  47.             system("cls");
  48.             //fflush( stdout );
  49.             escribir_msg();
  50.             opcion=1;
  51.             system("pause");
  52.       }
  53.       else if(opmenu==2)
  54.       {
  55.             cout<<"Opcion2"<<endl;
  56.             opcion=1;
  57.             system("pause");
  58.           //leer_archivo();
  59.       }
  60.       else if(opmenu==3)
  61.       {  
  62.          system("pause");
  63.              
  64.       }
  65.       else
  66.       {
  67.          cout<<"Opcion incorrecta"<<endl;
  68.          system("pause");
  69.          opcion=0;
  70.       }
  71.    
  72. }
  73.  
  74.  

P.D. Tambien falla con el switch.. tmb trate con el cin.getline y trono.. al gual ke con el gets...

ThX...

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Cin Misterioso
« Respuesta #1 en: Martes 29 de Noviembre de 2005, 02:45 »
0
Veo que usas las funciones de entrada y salida de la librería estándar (como getchar) así como las de flujos (usando los operadores sobrecargados << y >>).
Yo siempre uso los de la librería estándar pues no me he acostumbrado a usar los de flujos, pero creo (no estoy seguro) haber leído en alguna parte que no es aconsejable mezclarlos, espero que alguien que sepa algo más al respecto nos aclare este punto. De cualquier manera no creo que esté el error ahí. Las funciones de entrada y salida estándar así como la de flujos estándar he visto que están más enfocadas a entrada y salida de archivos y a interconecciones o tuberías (por ejemplo cuando desde la línea de comandos o consola usas los caracteres <, >, >>, <<, | entre programas y archivos) y no tanto a una interacción entre el programa y el usuario. Cuando, como en este caso, tengo que pedir datos al usuario para que los introduzca por el teclado, prefiero usar funciones no estándar proporcionadas por el compilador pero tener más control en el programa.

malcom

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Cin Misterioso
« Respuesta #2 en: Martes 29 de Noviembre de 2005, 05:58 »
0
Oye podrias probar colocando la instruccion fflush(stdin); antes de pedir la cadena.
Espero t ayude!

areku

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Cin Misterioso
« Respuesta #3 en: Martes 29 de Noviembre de 2005, 06:53 »
0
no... no funciona.. la vdd no se que puede pasar con eso.. ya probé con varias formas y no me funciona... al parecer tendre que dejar si menu mi programa..

de todos modos para que no quede la duda.. ayudenme :P thx ;)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cin Misterioso
« Respuesta #4 en: Martes 29 de Noviembre de 2005, 15:24 »
0
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
main()
{
 
     int opcion;
     char opmenu[2]={'\0','\0'}
     system("cls");
     cout<<"Seleccine una Opcion\n";
     cout<<"1) Escribir Mensaje para Encriptar\n";
     cout<<"2) Leer de un archivo el Mensaje para Desencriptar\n";
     cout<<"3) Salir\n";
     cin>>opmenu[0];
    // getc();
    // getche();
     if(opmenu[0]=='1')
     {
      
           system("cls");
           //fflush( stdout );
           escribir_msg();
           opcion=1;
           system("pause");
     }
     else if(opmenu[0]=='2')
     {
           cout<<"Opcion2"<<endl;
           opcion=1;
           system("pause");
         //leer_archivo();
     }
     else if(opmenu[0]=='3')
     {  
        system("pause");
            
     }
     else
     {
        cout<<"Opcion incorrecta"<<endl;
        system("pause");
        opcion=0;
     }
 
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Hay muchas formas de solucionarlo, he implementado una que creo te servira, pero la otra es revisar con getc y con getche.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io