• Sábado 14 de Diciembre de 2024, 18:02

Autor Tema:  CTRL+D  (Leído 2184 veces)

Igy

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
CTRL+D
« en: Martes 17 de Noviembre de 2009, 16:21 »
0
buenas, ¿alguien sabe cómo hago para que mi programa, en continua ejecución, se cierre cuando el usuario pulsa CTRL+D? gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: CTRL+D
« Respuesta #1 en: Martes 17 de Noviembre de 2009, 17:26 »
0
¿Para que S.O.?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Igy

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: CTRL+D
« Respuesta #2 en: Martes 17 de Noviembre de 2009, 17:40 »
0
para Linux, pero mi comando se ejecuta mediante linea de comandos, y muestra un menu (sin aplicacion grafica) y cada vez que termina de hacer la operacion seleccionada en el menu, vuelve al menu. el tema es que el programa termine cuando el usuario le de a CTRL+D

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: CTRL+D
« Respuesta #3 en: Martes 17 de Noviembre de 2009, 20:03 »
0
Cuando se hace CTRL+D la funcion feof sobre el stdin (previa lectura por supuesto) devuelve verdadero.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Igy

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: CTRL+D
« Respuesta #4 en: Miércoles 18 de Noviembre de 2009, 11:26 »
0
hummm no te sigo. quiero decir, según he leído, la funcion feof me devuelve 0 si estoy al final del archivo.
pero mi programa ni siquiera tiene por que contener un archivo. mi programa se ejecuta en el terminal y por defecto se cierra con CTRL+C, pero tengo que conseguir que lo haga con CTRL+D. no me entero de la relacion entre el feof y lo que busco.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: CTRL+D
« Respuesta #5 en: Miércoles 18 de Noviembre de 2009, 11:32 »
0
Si tenes que deshabilitar el Ctrl+C entonces tenes que trabajar con señales, sino unicamente tenes que leer del teclado (un bucle con fgets deberia ser suficiente para terminar si usas Ctrl+D, probalom, me referia a feof con stdin).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Igy

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: CTRL+D
« Respuesta #6 en: Jueves 19 de Noviembre de 2009, 12:21 »
0
vale, ya lo entendi, era tan facil como ejecutar el menu con un while(!feof(stdin)); no entendia al principio lo que querias decir. un millon de gracias.
ya que estoy te pregunto otra dudilla que me pasa.
guardo una serie de puntos (con sus 3 coordenadas y tal) en un fichero, me los guarda con una opcion y me los "carga" con otra, pero por alguna razon me imprime un punto de mas con todas las coordenadas a 0, y no se porque es. es algo asi:
while(!feof(f)){
  new=(point*)malloc...
  fread de las coordenadas
}

¿por que me pasa? no te pongo el codigo mas detallado porque creo que es un tema del feof. he probado a borrar el ultimo punto pero por alguna razon me ignora y (sin darme error), me sigue imprimiendo un pnto con todo a 0.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: CTRL+D
« Respuesta #7 en: Jueves 19 de Noviembre de 2009, 12:25 »
0
No tengo ni la menor idea de a que pueda deberse ese error, lo mejor seria que lo depuraras linea a linea, asi podrias ver que esta leyendo. Puede que estes usando datos cuando la lectura fallo por ejemplo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Igy

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: CTRL+D
« Respuesta #8 en: Viernes 20 de Noviembre de 2009, 11:21 »
0
vale ya lo dscubri (bueno, me lo dijeron). resulta que EOF lee y se queda en la ultima posicion, por lo que cuando vuelvo al while tras haber leido el último punto aun no se ha salido por lo que vuelve a entrar en el while. el tema esta en que se sale tras volver a leer despues de haber leido el ultimo punto, con lo que le pongo un if(!feof(f)) despues de leer la primera coordenada y ya esta.
no se si me he explicado muy bien.
muchas gracias eternal idol

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: CTRL+D
« Respuesta #9 en: Viernes 20 de Noviembre de 2009, 11:41 »
0
De nadasd  :beer:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Igy

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: CTRL+D
« Respuesta #10 en: Jueves 26 de Noviembre de 2009, 15:15 »
0
Buenas, probando y probando el programa me dado cuenta de que si lo hago tras haber hecho ya cosas me sale del programa perfectamente. Pero si lo hago siendo mi primera opción, lo primero que hago tras ejecutar el programa, me da un fallo de segmentación y la verdad es que no se por qué. Dado que la opción la recojo con un scanf, me planteo el hecho de que poner un getline y que eso pueda solucionar el error, puesto que el scanf es muy "especialito".

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: CTRL+D
« Respuesta #11 en: Jueves 26 de Noviembre de 2009, 15:34 »
0
scanf es preferible no usar nunca, fgets (con stdin) + sscanf es mucho mejor opcion.

Para el fallo de segmentacion compila el programa con -g y usa gdb para depurarlo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.