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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error con funciones (Solucionado, gracias!)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error con funciones (Solucionado, gracias!)  (Leído 3,783 veces)
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Error con funciones (Solucionado, gracias!)
« en: 12 Octubre 2012, 06:12 am »

Hola, hay un error en funciones y no logro encontrarlo, primero que nada quiero que sepan que soy nuevo en esto de usar funciones, siempre eh hecho completamente mi programa en main y ahora estoy empezando a usar funciones.

Este codigo si corre bien, pero a la hora de poner la opcion 1, entra a la funcion "encode" y en la funcion encode, se supone que debe de preguntar el texto que se va a codificar, pero en vez de preguntarlo se lo brinca completamente.

Cabe aclarar que si lo pongo todo en main y no uso las funciones, si hace lo que tiene que hacer, pero en algun lado me equivoque con las funciones y simplemente se salta todo.

agradezco mucho la ayuda! (:

Código:
#include "stdafx.h"
#include <iostream>
#include <iomanip>

void encode();
int op(int);

int main()
{
int opciones, resultado;

opciones = 0;
resultado = op(opciones);

switch(resultado)
{
case 1: encode();
break;
default: std::cout << "nada!";
}

system ("pause");
return 0;
}

int op(int opciones)
{
std::cout << "Select an option:\n1.Encode\n";
std::cin >> opciones;
system("cls");
return opciones;
}

void encode()
{
int counter = 0;
FILE * filePad;
int lengthText = 0;
char text[50000];

filePad = fopen("TextEncrypted.txt", "a+");
std::cout << "Text:\n";
std::cin.getline(text, 50000);
}


« Última modificación: 12 Octubre 2012, 15:45 pm por Erres » En línea

En lo que sea, pero el mejor.
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: Error con funciones
« Respuesta #1 en: 12 Octubre 2012, 09:26 am »

Hola,

El problema radica en tu prototipo de función, claramente no hay necesidad del parámetro opciones en la función "op". Además si tu vas a retornar un valor, claramente ocuparás una variable que lo almacene y no puedes ocupar aquella que pasaste como parámetro.

Código
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <iomanip>
  4.  
  5. void encode();
  6. int op();
  7.  
  8. int main()
  9. {
  10. int  resultado;
  11.  
  12. resultado = op();
  13.  
  14. switch(resultado)
  15. {
  16. case 1: encode();
  17. break;
  18. default: std::cout << "nada!";
  19. }
  20.  
  21. system ("pause");
  22. return 0;
  23. }
  24.  
  25. int op()
  26. {
  27.        int opciones = 0;
  28. std::cout << "Select an option:\n1.Encode\n";
  29. std::cin >> opciones;
  30. system("cls");
  31. return opciones;
  32. }
  33.  
  34. void encode()
  35. {
  36. int counter = 0;
  37. FILE * filePad;
  38. int lengthText = 0;
  39. char text[50000];
  40.  
  41. filePad = fopen("TextEncrypted.txt", "a+");
  42. std::cout << "Text:\n";
  43. std::cin.getline(text, 50000);
  44. }

Así debería de funcionarte, en cuanto al código que coloques utiliza la etiqueta geshi y no code.

Saludos.


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Error con funciones
« Respuesta #2 en: 12 Octubre 2012, 11:56 am »

¡Buenas!

No tiene nada que ver con lo anterior. En este caso da lo mismo que declares una variable dentro de la funcion como si la pasas como parametro. Es cierto que al no pasar una referencia ni un puntero (si no has visto esto todavia ya lo haras), realmente no estas modificando el valor fuera de la funcion, pero tampoco intentas acceder  al dato leido a traves del parametro sino que directamente lees el dato devuelto por la funcion, asi no tienes mayor problema.

La cuestion es que dentro de la funcion lees un dato utilizando el operador >> sobre cin. Este operador, siempre deja al menos un salto de linea en la entrada (cuando terminas de introducir los datos y pulsas intro estas introduciendo el salto de linea). Entonces, cuando dentro de la funcion encode llegas a
Código
  1. std::cin.getline(text, 50000);
  2.  
getline lee hasta que encuentra un salto de linea. El mismo salto de linea que se ha quedado antes al utilizar el operador >> con cin y por lo tanto no te da la opcion de leer el texto que quieras introducir.

Para evitar esto, despued de utilizar >> con cin, siempre tendras que terminar de leer la linea (que como habiamos dicho, terminara en salto de linea). Para esto, cuando utilices >> con cin acostumbrate siempre ha hacer lo siguiente:
Código
  1. cin >> un_dato; //leemos el dato
  2.  
  3. //si ya no tenemos que leer mas datos
  4. while(cin.get() != '\n'); //leemos los caracteres que queden en la linea
  5.  

Aqui no he tenido en cuenta que pueda aparecer un EOF, por lo que el codigo tampoco es completamente correcto, pero creo que es lo suficientemente claro para que veas como funciona.

Termina de leer la linea dentro de la funcion op, y ya veras como ahora si te pedira que introduzcas el texto que quieras.

¡Saludos!

PD: En C++ creo que se podia descartar el contenido del buffer de entrada con una sola llamada a una funcion, pero ahora no recuerdo cual era...

Si buscas en la referencia de cplusplus la clase istream (cin es un objeto de esta clase) te saldran todas las funciones miembro que tiene esta clase y ahi estara la funcion que te digo (tendras que combinar un par, creo)
« Última modificación: 12 Octubre 2012, 12:03 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Error con funciones
« Respuesta #3 en: 12 Octubre 2012, 15:18 pm »

muchas gracias por las respuestas The Swash y do-while, pero creo que no me supe explicar bien, ninguna de las 2 resolvio el problema que tengo aunque si me fueron de ayuda!

ya mejore lo de las funciones (: ya que es cierto que no ocupaba tenerla como parametro.

y el siguiente codigo si no me equivoco es solo para detener el programa hasta que des un enter.

Código
  1. while(cin.get() != '\n');
« Última modificación: 12 Octubre 2012, 15:30 pm por Erres » En línea

En lo que sea, pero el mejor.
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Error con funciones
« Respuesta #4 en: 12 Octubre 2012, 15:21 pm »

pero de todos modos no lee el caracter =s, si pongo ese codigo y luego le digo imprime el caracter, no imprime nada =s, ya que (si no me equivoco) no leeyo nada realmente.

modifique esto en la parte de mero abajo nadamas:

parte de mero abajo:
Código
  1.  
  2. filePad = fopen("TextEncrypted.txt", "a+");
  3. std::cout << "Text:\n";
  4. std::cin.getline(text, 50000);
  5. while(std::cin.get() != '\n');
  6. std::cout << "nice!";
  7.  
  8. std::cout << text;
  9.  
  10.  


codigo completo:
Código
  1.  
  2. #include "stdafx.h"
  3. #include <iostream>
  4. #include <iomanip>
  5.  
  6. void encode();
  7. int op();
  8.  
  9. int main()
  10. {
  11. int  resultado;
  12.  
  13. resultado = op();
  14.  
  15. switch(resultado)
  16. {
  17. case 1: encode();
  18. break;
  19. default: std::cout << "nada!";
  20. }
  21.  
  22. system ("pause");
  23. return 0;
  24. }
  25.  
  26. int op()
  27. {
  28.        int opciones = 0;
  29. std::cout << "Select an option:\n1.Encode\n";
  30. std::cin >> opciones;
  31. system("cls");
  32. return opciones;
  33. }
  34.  
  35. void encode()
  36. {
  37. int counter = 0;
  38. FILE * filePad;
  39. int lengthText = 0;
  40. char text[50000];
  41.  
  42. filePad = fopen("TextEncrypted.txt", "a+");
  43. std::cout << "Text:\n";
  44. std::cin.getline(text, 50000);
  45. while(std::cin.get() != '\n');
  46. std::cout << "nice!";
  47.  
  48. std::cout << text;
  49. }
  50.  
  51.  
« Última modificación: 12 Octubre 2012, 15:36 pm por Erres » En línea

En lo que sea, pero el mejor.
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Error con funciones
« Respuesta #5 en: 12 Octubre 2012, 15:42 pm »

ohh que pena, ya me funciono.

quedo asi:

   
Código
  1. filePad = fopen("TextEncrypted.txt", "a+");
  2. while(std::cin.get() != '\n');
  3. std::cout << "Text:\n";
  4. std::cin.getline(text, 50000);

Gracias!
En línea

En lo que sea, pero el mejor.
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Error con funciones (Solucionado, gracias!)
« Respuesta #6 en: 12 Octubre 2012, 17:01 pm »

Por lo que veo no has leido bien la explicacion que te he dado. Tienes que terminar de leer la linea despues de cada cin >>, sino siempre te quedara el salto de linea.

Si, lo he releido y estaba bien explicado y con un ejemplo. Si preguntas, molestate en leer con atencion las respuestas.
« Última modificación: 12 Octubre 2012, 17:06 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Error con funciones
« Respuesta #7 en: 12 Octubre 2012, 17:35 pm »

muchas gracias por las respuestas The Swash y do-while, pero creo que no me supe explicar bien

perdon do-while, me referia a qe (yo) no supe explicar bien mi pregunta; y muchas gracias!, gracias a tu explicacion aprendi algo nuevo hoy y me quedo mas que claro.
En línea

En lo que sea, pero el mejor.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado]: Utilizar funciones de una página en php « 1 2 »
Programación Visual Basic
grester43hck 10 5,328 Último mensaje 15 Enero 2011, 10:35 am
por grester43hck
Netflix estrenará funciones sociales gracias a la modificación de una ley ...
Noticias
wolfbcn 0 1,183 Último mensaje 27 Diciembre 2012, 21:56 pm
por wolfbcn
solucionado gracias
Ejercicios
j59 0 2,452 Último mensaje 22 Diciembre 2013, 00:13 am
por j59
Else if en programacion en C ayuda :-\ -- solucionado, gracias;
Programación C/C++
Naslednik 7 11,270 Último mensaje 20 Abril 2015, 03:28 am
por Naslednik
Solucionado, gracias
PHP
Anonymatrix 3 1,757 Último mensaje 10 Mayo 2015, 18:29 pm
por Anonymatrix
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines