Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ;c1v!c en 21 Febrero 2011, 04:39 am



Título: (SOLUCIONADO) me dicen si les funciona!!
Publicado por: ;c1v!c en 21 Febrero 2011, 04:39 am
Hola alguien me podria decir si les compila, ya que lo pruebo en el Dev-C++
y me anda perfecto y lo probe en una shell de ubuntu y no me deja ingresar
S o N me tira q ingrese letra del departamento, pero en el Dev de windows compila y funciona perfecto!

Gracias!

Código:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
int i,j;
char dep,exp;
     for(i=0;i<10;i++)
     {
             for(j=0;j<5;j++)
             {
                printf("Ingrese letra de departamento:");
                scanf("%c",&dep);fflush(stdin);
                
                printf("Ingrese 'S' si pago las expensas o 'N' si no pago expensas:");
                scanf("%c",&exp);fflush(stdin);
                exp=toupper(exp);
                
                if(exp=='N')
                            {printf("\nPiso %d departamento %c no pago expensas!\n",i,dep);}
                else
                    {printf("HOLa carlos!");}
             }
     }
return 0;
}


Título: Re: me dicen si les funciona!!
Publicado por: Littlehorse en 21 Febrero 2011, 20:03 pm
Código
  1. fflush(stdin);

Esa linea es lo que te provoca el comportamiento indefinido. Utiliza el buscador del foro y lee las chinchetas.

Saludos


Título: Re: me dicen si les funciona!!
Publicado por: Pirata LOL en 21 Febrero 2011, 21:37 pm
funciona... si y no  :silbar:
dinos mejor el enunciado del programa pero asi probandolo nomas
el programa nunca se cierra...
sigue pidiendo la letra del apartamento hasta el infinito creo  :rolleyes:
buueno por lo menos hasta unas 10 veces de prueba porq no quise seguir


SUGERENCIA... "coloca el enunciado y asi decirte si hace lo que se pide"  ;)


Título: Re: me dicen si les funciona!!
Publicado por: ;c1v!c en 21 Febrero 2011, 22:11 pm
Código
  1. fflush(stdin);

Esa linea es lo que te provoca el comportamiento indefinido. Utiliza el buscador del foro y lee las chinchetas.

Saludos

Le saque el fflush(stdin); pero sigue andando mal nose por que no me funciona en la shell de linux y en el Dev de win si me funca!


Título: Re: me dicen si les funciona!!
Publicado por: Garfield07 en 21 Febrero 2011, 22:15 pm
En vez de scanf ("%c"); usa fgetc o getc, pero no scanf ("%c"). A veces da esos errores :P


Título: Re: me dicen si les funciona!!
Publicado por: ;c1v!c en 21 Febrero 2011, 22:25 pm
me podrias decir como quedaria el codigo cambiando el scanf por las opciones q me diste!
Gracias!


Título: Re: me dicen si les funciona!!
Publicado por: Garfield07 en 21 Febrero 2011, 22:55 pm
Seguro que no te habría costado mucho a ti...
Aparte, aplaudo tu forma de usar el tabulador para que sea más fácil modificar el código, si olvidar el nombre superdescriptivo de las variables...

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. int i,j, opc;
  7. char letra;
  8.  
  9. for(i=0;i<10;i++)
  10. {
  11. for(j=0;j<5;j++)
  12. {
  13. printf("Ingrese letra de letra del apartamento: ");
  14. letra = getc (stdin);
  15.  
  16. printf("1) Pago expensas\t2) No pago expensas\nOpcion: ");
  17. scanf ("%d", &opc);
  18.  
  19. switch  (opc)
  20. {
  21. case 1 : printf ("\nPiso %d letra del apartamento %c no pago expensas!\n",i,letra); break;
  22. case 2 : printf ("\nHola Carlos!\n"); break;
  23. default: printf ("\nOpcion incorrecta...\n"); break;
  24. }
  25. }
  26. }
  27. return 0;
  28. }
  29.  
Lo raro es que se me salta el getc del apartamento y no el scanf... xD
Suerte!


Título: Re: me dicen si les funciona!!
Publicado por: ;c1v!c en 22 Febrero 2011, 01:16 am
mira puse el codigo q me pasaste y me sigue dando error!!
osea anda perfecto la primera ves y a la segunda ya se rompe, te dejo
una imagen:

Gracias!

http://img213.imageshack.us/img213/15/pantallazong.png


Título: Re: me dicen si les funciona!!
Publicado por: Garfield07 en 22 Febrero 2011, 01:21 am
Sí, me pasa lo mismo. La cosa es que no va ni con fgetc ni con getc ni con scanf. Bah, ahora codeo uno con fgets, a lo bruto :P


Título: Re: (SOLUCIONADO) me dicen si les funciona!!
Publicado por: ;c1v!c en 22 Febrero 2011, 01:43 am
Bueno quiero contarles q encontre la solucion casi diriamos de suerte, justo encontre un diagrama de flujo donde tenia el siguiente codigo:

...scanf("%s",&exp)...

Entonces modifique en los dos scanf en lugar de "%c" coloque "%s" y solucione el porblema compila a la perfeccion!!

Ahora voy a investigar por que scanf funciona con "%c" y "%s" por q no tengo ni idea!!

Saludos y gracias!!


Título: Re: (SOLUCIONADO) me dicen si les funciona!!
Publicado por: Ferno en 22 Febrero 2011, 04:49 am
Si escribes "%c" el programa espera leer un char y guardarlo en la variable.
Si escribes "%s" el programa espera leer un string y guardarlo en la variable.

Tu problema radicaba en la lectura del caracter de salto de línea ('\n') el cual queda almacenado en el buffer de entrada cuando apretas enter al momento de escribir un caracter o de realizar determinada entrada de datos por el stdin. Cuando ingresabas el primer caracter y le dabas a enter, había dos caracteres almacenados en el buffer, el que tu escribiste, y el enter. El primero, se le asignaba a tu variable, el segundo, se le asignaba a la próxima variable tipo char la cual pedías tomar un valor!

Lo que podías hacer era fabricarte una funcion para recortar ese caracter de salto de línea.

Tu problema se solucionó al incluir "%s" porque así, el programa toma TODA la línea (y no solo un caracter por vez), es decir, toma tanto el caracter que tu escribistes, como el salto de línea. Si no estoy mal, y corríjanme si me equivoco, lo que sucede ahora es que, como tu variable soporta solo 1 byte por ser del tipo char, se le asigna el primer caracter a esta, y se "elimina" el caracter de salto de línea.


Título: Re: (SOLUCIONADO) me dicen si les funciona!!
Publicado por: ;c1v!c en 22 Febrero 2011, 15:54 pm
Buenisimo ferno!!
gracias por aclararme la duda.

Saludos!! ;-)


Título: Re: (SOLUCIONADO) me dicen si les funciona!!
Publicado por: Garfield07 en 22 Febrero 2011, 18:49 pm
El problema es cuando metes más de un carácter... BoF total y nunca más claro :P Con %s debería soltarte un waring, es un fallo de seguridad serio... Sencillamente abrid el programa con GDB y meterle unas 20 ases...