elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:54  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema con el compilador gcc de ubuntu!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el compilador gcc de ubuntu!!  (Leído 4,645 veces)
Smig0l

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Problema con el compilador gcc de ubuntu!!
« en: 15 Marzo 2009, 00:22 »

Hola, antes de nada os felicito por el foro porque esta genial!!
Tengo un problemita con el compilador gcc. Compilo este sencillo programa en C:
Citar
#include <stdio.h>
main(){
  float base,altura,area;
  char opcion='N';
  printf("\nIntroduce Base: ");
  scanf("%f",&base);
  printf("\nIntroduce Altura: ");
  scanf("%f",&altura);
  area=(base*altura/2);
  printf("\nEl area es: %f",area);
  printf("\nTerminar?(S/N):");
  fflush(stdin);
  scanf("%c",&opcion);
  if (opcion=='N'){
    main();
  }else{
  }
}



El resultado es el siguiente:

******@******-acer:~/Escritorio$ ./a.out

Introduce Base: 8

Introduce Altura: 7

El area es: 28.000000
Terminar?(S/N):******@******-acer:~/Escritorio$

El problema esta en que se salta el ultimo scanf y no se porque.
Lo probe en dos ordenadores y no funciona, tambien probe con el fgets y tampoco.
Lo he compilado con el visual C y me funciona.
Alguien puede ayudarme???


En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #1 en: 15 Marzo 2009, 08:04 »

fflush(stdin);

El comportamiento de eso es indefinido y es lo que genera tu problema, pone fflush stdin en Google.


En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Smig0l

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #2 en: 15 Marzo 2009, 12:09 »

No funciona,quite el fflush y sigue pasando lo mismo, alguna solucion mas??
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #3 en: 15 Marzo 2009, 12:20 »

Por supuesto que sacando eso tampoco funciona, es lo que lo hace funcionar en VC++ pero como te dije su comportamiento es indenido por el standard y no hace lo mismo en *NIX. Usa el Google tal como te dije para entender el problema y averiguar sobre las posibles soluciones.
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Smig0l

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #4 en: 15 Marzo 2009, 12:34 »

Pero el problema que tengo esque el compilador se salta la sentencia del scanf porque quiere, mientras que el visual C no se la salta. Pero lo raro eske solo se salta ese scanf porque los scanf de la base y la altura van perfectos.
Y lo del fflush ya sabia lo que hacia, sirve para limpiar el buffer del teclado. estuve buscando y en unix el fflush no funciona, pero no encontre ninguna solucion o alternativa.
Alguna idea??
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #5 en: 15 Marzo 2009, 13:02 »

En VC++ funciona por el fflush ... si lo sacas tenes el mismo resultado que en *NIX.

Usa fgets y sscanf.
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
alki


Desconectado Desconectado

Mensajes: 307


Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #6 en: 15 Marzo 2009, 14:49 »

Buenas

Veamos un programa aun mas sencillo:

Código
#include <stdio.h>
 
main () {
 char opcion = 's';
 
while (opcion == 's') {
 printf("Quieres seguir?:");
 opcion = getchar();
}
       return 0;
 
}
 

Aqui estoy usando la funcion getchar() para obtener el caracter.
Inserto el primer caracter y todo bien, pero la segunda vez que sale el mensaje se coge el caracter "salto de linea". He estado leyendo por ahi y dicen que para nada usar fflush(stdin).

¿Cual es la solucion correcta en C para este problema?

Un Saludo
En línea
Smig0l

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #7 en: 15 Marzo 2009, 15:02 »

Probe con el fgets y el sscanf 
Citar
fgets(&cadena,10,stdin);
sscanf(&cadena,"%c",&opcion);


y me sigue pasando lo mismo.
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #8 en: 15 Marzo 2009, 15:05 »

Probe con el fgets y el sscanf 

y me sigue pasando lo mismo.

¿Lo usaste tambien para los anteriores scanf?

Buenas

Veamos un programa aun mas sencillo:

Aqui estoy usando la funcion getchar() para obtener el caracter.
Inserto el primer caracter y todo bien, pero la segunda vez que sale el mensaje se coge el caracter "salto de linea". He estado leyendo por ahi y dicen que para nada usar fflush(stdin).

¿Cual es la solucion correcta en C para este problema?

Con las funciones que mencione antes va bien:
  char l[128];
  fgets(l, sizeof(l), stdin);
  sscanf(l, "%c", &opcion);
« Última modificación: 15 Marzo 2009, 15:26 por Eternal Idol » En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
-Ramc-


Desconectado Desconectado

Mensajes: 493



Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #9 en: 15 Marzo 2009, 15:31 »

No uses fflush está indefinido su funcionamiento ya que sólo sirve los miercoles y fines de semana(A veces no todos los miercoles).
Citar
The function fflush() forces a write of all buffered data for the given output or update stream via the stream's underlying write function.

http://c.conclase.net/librerias/funcion.php?fun=fflush

Con lo que menciona Eternal Idol sí funciona, pruebalo.
« Última modificación: 15 Marzo 2009, 15:33 por -Ramc- » En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
Smig0l

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #10 en: 15 Marzo 2009, 15:53 »

Con lo del fgets y el sscanf y que me funciona, pero tengo un problema, cuando le pongo en terminar?? algo que no sea 'n' o 'N' me da un error: Fallo de segmentacion. Y lo que tendria que hacer seria finalizar el programa y ya esta, no??

Citar
#include <stdio.h>
main(){
  float base,altura,area;
  char opcion='N',cadena;
  printf("\nIntroduce Base: ");
  fgets(&cadena,10,stdin);
  sscanf(&cadena,"%f",&base);
  printf("\nIntroduce Altura: ");
  fgets(&cadena,10,stdin);
  sscanf(&cadena,"%f",&altura);
  area=(base*altura/2);
  printf("\nEl area es: %f",area);
  printf("\nTerminar?(S/N):");
  fgets(&cadena,10,stdin);
  sscanf(&cadena,"%c",&opcion);
  if (opcion=='N' || opcion=='n'){
    main();
  }else{
  }
}

En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #11 en: 15 Marzo 2009, 15:56 »

Lo raro es que no te de una excepcion antes, estas leyendo mas memoria de la que reservaste para cadena (un caracter) ... mira el ejemplo que puse para arreglarlo.
« Última modificación: 15 Marzo 2009, 15:58 por Eternal Idol » En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
-Ramc-


Desconectado Desconectado

Mensajes: 493



Ver Perfil
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #12 en: 15 Marzo 2009, 15:58 »

Acabo de compilar y probar y con gcc funciona correctamente.

gcc 4.2.3
En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
vertexSymphony


Desconectado Desconectado

Mensajes: 2.156



Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #13 en: 15 Marzo 2009, 16:04 »

http://foro.elhacker.net/programacion_cc/como_limpiar_el_buffer_de_entrada_aka_fflushstdin-t108358.0.html

Alex~
En línea

Mail/PGP/XMPP/D*
Código
gpg --recv-keys --keyserver pgp.mit.edu 0xCD21671D
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con el compilador gcc de ubuntu!!
« Respuesta #14 en: 15 Marzo 2009, 16:10 »


Esta bien pero ... ¿Entonces usamos eso - y fflush(stdin) en Windows - en lugar de olvidarnos de scanf?  ;)

PD. El codigo de ejemplo no compila, el prototipo no coincide sdtin_flush vs stdin_flush. Ahora lo arreglo ...
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema del compilador?!?!
Programación C/C++
ChicoMaravilla 5 317 Último mensaje 9 Noviembre 2011, 02:02
por rir3760
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines