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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Duda] Impresion stdprn
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Duda] Impresion stdprn  (Leído 5,756 veces)
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
[Duda] Impresion stdprn
« en: 5 Septiembre 2012, 18:18 pm »

Hola.
¿Cómo puedo limitar el número de líneas por página al imprimir un archivo por stdprn? Tengo que imprimir un archivo por la impresora poniendo solo 55 líneas por página. Ya sé que se pueden pasar los archivos a la impresora con fprintf, previamente cogiendo todos los caracteres del archivo con fgets(yo por lo menos, lo hago así). Así que la cuestión es solo la antes planteada, pero si me pasáis un código completo que me pueda servir para aprender, pues mejor.

Saludos.


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #1 en: 5 Septiembre 2012, 18:44 pm »

Ufff es complicado pero por lo que he estado viendo puedes pasar la secuencia de escape \f para pasar de página, o sea imprimes 55 líneas , pasas de página con \f etc... , mira aquí --> http://stackoverflow.com/questions/4334370/escape-sequence-f-form-feed-what-exactly-is-it


En línea

Regístrate en
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #2 en: 5 Septiembre 2012, 18:47 pm »

He estado pensando y creo que sería fácil si conociera cuántos caracteres caben en una línea de un fóleo DIN A4. Creo que ese valor sería la clave ¿Alguna idea?
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #3 en: 5 Septiembre 2012, 18:55 pm »

He estado pensando y creo que sería fácil si conociera cuántos caracteres caben en una línea de un fóleo DIN A4. Creo que ese valor sería la clave ¿Alguna idea?
Depende de los márgenes , del tamaño de la letra...
En línea

Regístrate en
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #4 en: 5 Septiembre 2012, 19:11 pm »

Ok, vamos, que está dificilillo, aunque la idea era que fuera para texto plano.

Bueno, ya que he abierto un tema, hago otra pregunta ¿Qué fallo tiene este código?

Código
  1. /* Copia de archivo de texto cambiando minúsculas por mayúsculas. */
  2.  
  3. #include <stdio.h>
  4.  
  5. FILE copia_mayus(FILE *fp, FILE *fp_nuevo);
  6.  
  7. main()
  8. {
  9.      char filename[40], filename_nuevo[40];
  10.      char contenido[200];
  11.      FILE *fp, *fp_nuevo;
  12.  
  13.      printf("Introduce la ruta del archivo a copiar: ");
  14.      gets(filename);
  15.      printf("Introduce la ruta del archivo nuevo: ");
  16.      fp=fopen(filename,"r");
  17.      fp_nuevo=fopen(filename_nuevo,"w");
  18.  
  19.      fp_nuevo=copia_mayus(fp, fp_nuevo);
  20.      fgets(contenido, 200, fp);
  21.      fprintf(stdout,"%s",contenido);
  22. }
  23.  
  24. FILE copia_mayus(FILE *fp, FILE *fp_nuevo)
  25. {
  26.     char caracter;
  27.  
  28.     while(caracter!=EOF)
  29.     {
  30.         caracter=fgetc(fp);
  31.  
  32.         if((caracter=>61)&(caracter=<121))
  33.         {
  34.             fprintf(fp_nuevo, "%c", caracter-32);
  35.         }
  36.         else
  37.         {
  38.             fprintf(fp_nuevo, "%c", caracter);
  39.         }
  40.     }
  41.     return fp_nuevo;
  42.     fclose(fp_nuevo);
  43. }
  44.  

Me dice que hay un error al asignar los tipos (cuando asigno el valor de retorno de mi función personalizada a fp_nuevo, dice que no son compatibles).
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #5 en: 5 Septiembre 2012, 21:25 pm »

Estás retornando FILE en vez de FILE* , además , en la función copia mayus tienes un error de sintaxis como casas jajaja mira:
Este es tu código:
Código
  1. if((caracter=>61)&(caracter=<121))
Y este es tu código corregido:
Código
  1. if((caracter>=61)&&(caracter<=121))
El and debe de ser lógico... , los operadores de comparación estaban al revés.Y he añadido para que coja el filename_nuevo que no lo tenías puesto , hé aquí tu código:
Código
  1. /* Copia de archivo de texto cambiando minúsculas por mayúsculas. */
  2.  
  3. #include <stdio.h>
  4.  
  5. FILE* copia_mayus(FILE *fp, FILE *fp_nuevo);
  6.  
  7. main()
  8. {
  9.      char filename[40], filename_nuevo[40];
  10.      char contenido[200];
  11.      FILE *fp, *fp_nuevo;
  12.  
  13.      printf("Introduce la ruta del archivo a copiar: ");
  14.      gets(filename);
  15.      printf("Introduce la ruta del archivo nuevo: ");
  16.      gets(filename_nuevo);
  17.      fp=fopen(filename,"r");
  18.      fp_nuevo=fopen(filename_nuevo,"w");
  19.  
  20.      fp_nuevo=copia_mayus(fp, fp_nuevo);
  21.      fgets(contenido, 200, fp);
  22.      fprintf(stdout,"%s",contenido);
  23. }
  24.  
  25. FILE* copia_mayus(FILE *fp, FILE *fp_nuevo)
  26. {
  27.     char caracter;
  28.  
  29.     while(caracter!=EOF)
  30.     {
  31.         caracter=fgetc(fp);
  32.  
  33.         if(caracter>=61&&caracter<=121)
  34.         {
  35.             fprintf(fp_nuevo, "%c", caracter-32);
  36.         }
  37.         else
  38.         {
  39.             fprintf(fp_nuevo, "%c", caracter);
  40.         }
  41.     }
  42.     return fp_nuevo;
  43.     fclose(fp_nuevo);
  44. }
  45.  
« Última modificación: 5 Septiembre 2012, 21:31 pm por avesudra » En línea

Regístrate en
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #6 en: 6 Septiembre 2012, 02:47 am »

Bueno, ya que he abierto un tema, hago otra pregunta ¿Qué fallo tiene este código?

Código
  1. /* Copia de archivo de texto cambiando minúsculas por mayúsculas.
*/
Si como indica el enunciado el objetivo es tomar un texto y convertirlo a mayúsculas la primera pregunta que viene a la mente es: ¿Porque comparas con el rango 61 .. 121?

Tomando como base el programa de avesudra la función se puede reducir a:
Código
  1. #include <ctype.h>
  2.  
  3. FILE *copia_mayus(FILE *fp, FILE *fp_nuevo)
  4. {
  5.   int ch; /* getchar et al retornan un "int" */
  6.  
  7.   while ((ch = fgetc(fp)) != EOF)
  8.      fputc(toupper(ch), fp_nuevo);
  9.  
  10.   return fp_nuevo;
  11. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #7 en: 6 Septiembre 2012, 02:58 am »

Si como indica el enunciado el objetivo es tomar un texto y convertirlo a mayúsculas la primera pregunta que viene a la mente es: ¿Porque comparas con el rango 61 .. 121?

Tomando como base el programa de avesudra
El programa es suyo jajajaja lo digo porque no me gusta eso de que haya corregido algo y ya el codigo es mio , es verdad yo tampoco entiendo para que lo compara , en todo caso sería comparar si estuviese desde 97 a 122 que son las minusculas y si esta entre ellas le resta 32 para ponerlas en mayusculas, hombre no lo mates , que con eso que ha hecho en vez de utilizar la funcion toupper hace la suya propia y asi aprende jejeje
¡Un saludo y buena observacion!
En línea

Regístrate en
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #8 en: 6 Septiembre 2012, 12:30 pm »

Gracias por las respuestas, me sirvieron un montón.
Eso sí, ¿para qué sirve la función toupper()?
Otra cosilla, yo había puesto un operador de bit(&), ¿no?

Saludos.
« Última modificación: 6 Septiembre 2012, 12:39 pm por apoeti » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [Duda] Impresion stdprn
« Respuesta #9 en: 6 Septiembre 2012, 13:58 pm »

Gracias por las respuestas, me sirvieron un montón.
Eso sí, ¿para qué sirve la función toupper()?
Otra cosilla, yo había puesto un operador de bit(&), ¿no?

Saludos.
La funcion toupper sirve para pasar el caracter que le pases a mayusculas, claro los operadores de bit no se utilizan para comparar , ten cuidado con eso :D

¡Un saludo!
En línea

Regístrate en
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Impresion en VB
Programación Visual Basic
valtheran 1 1,236 Último mensaje 30 Septiembre 2006, 16:13 pm
por CeLaYa
DUDA impresion caracter a caracter con retardo (C)
Programación C/C++
el_nene_kpy 8 14,082 Último mensaje 5 Febrero 2012, 03:43 am
por Xandrete
Duda en la impresion en pantalla
Programación C/C++
EdgarKrieger 3 5,021 Último mensaje 27 Noviembre 2013, 20:25 pm
por EdgarKrieger
Duda sobre impresion [Resuelto]
PHP
elezekiel 2 2,947 Último mensaje 21 Agosto 2017, 05:32 am
por elezekiel
Duda general Impresión por VPN W10
Windows
SrMcLister 0 2,133 Último mensaje 16 Junio 2019, 17:17 pm
por SrMcLister
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines