Problema al compilar en GCC (bajo Linux)

Iniciado por RakNae, 3 Julio 2010, 17:42 PM

0 Miembros y 1 Visitante están viendo este tema.

RakNae

Hola, estaba intentando compilar este programa pero me da errores con esta instrucción: stdprn

Os pongo el código y ya comentáis. Un saludo y muchas gracias ;)

/* PRINT_IT.C - Este programa imprime un listado con números de línea */

#include <stdio.h>

void do_heading(char *filename);

int line, page;

main( int argv, char *argc[] )
{
char buffer[256];
FILE *fp;

if ( argv < 2)
{
fprintf(stderr, "\nProper Usage is: " );
fprintf(stderr, "\n\nPRINT_IT filename.ext\n" );
exit(1);
}

if (( fp = fopen( argc[1], "r" )) == NULL )
{
fprintf( stderr, "Error opening file, %s!", argc[1]);
exit(1);
}

page = 0;
line = 1;
do_heading( argc[1]);

while( fgets( buffer, 256, fp ) != NULL )
{
if( line % 55 == 0 )
do_heading( argc[1] );

fprintf( stdprn, "%4d:\t%s", line++, buffer );
}

fprintf( stdprn, "\f" );
fclose(fp);
return 0;
}

void do_heading( char *filename )
{
page++;

if ( page > 1)
fprintf( stdprn, "\f" );

fprintf( stdprn, "Page: %d, %s\n\n", page, filename );
}
Informático.

@synthesize

Lo 1º mal que he visto, es un main sin declaración de tipo.

int main

RakNae

Gracias, pero eso no me resuelve el problema. Esto lo he visto en un libro, se supone que es correcto y el compilador no lo detecta como problema (en mi caso GCC). Saludos ;)
Informático.

@synthesize

Pues menudo libro  :-\ el sistema espera que le metas el tipo a int. Es mas, compilo tu code con gcc y...

Citar2.c:11: warning: return type defaults to 'int'
2.c: In function 'main':

También veo que usas exit() y no has definido su cabecera....

Al compilar poner -Wall? Eso te muestra todos los warnings y errores. Compila tu código y verás.

Horricreu

#4
A ver, el problema he entendido es que no te va stdprn. ¿Errores de compilación? ¿Warnings? ¿O simplemente no te imprime? Prueba haciendo esto y me dices que tal:

Código (cpp) [Seleccionar]
FILE *stdprn;
stdprn = fopen("PRN", "wb");
fprintf(stdprn, "Test\f");
fclose(stdprn);


Saludos :P

EDITO: y si no, lée este enlace:

http://forums.devshed.com/showthread.php?p=251332

nicolas_cof

#5
RakNae, el problema es que stdprn no esta en la libreria stdio.h ya que no forma parte del estandar ANSI C.

Otra cosa que te recomiendo, es no usar variables globales.

Para utilizar la funcion exit() tenes que incluir la libreria stdlib.h

Salu10.

RakNae

Muchas gracias por sus respuestas. Si que hay que poner int main()
Muchas gracias y aquí pongo el código que sí que funciona:
/* PRINT_IT.C - Este programa imprime un listado con números de línea */

#include <stdio.h>
#include <stdlib.h>

void do_heading(char *filename);

int line, page;

int main( int argv, char *argc[] )
{
char buffer[256];
FILE *fp;

if ( argv < 2)
{
fprintf(stderr, "\nProper Usage is: " );
fprintf(stderr, "\n\nPRINT_IT filename.ext\n" );
exit(1);
}

if (( fp = fopen( argc[1], "r" )) == NULL )
{
fprintf( stderr, "Error opening file, %s!", argc[1]);
exit(1);
}

page = 0;
line = 1;
do_heading( argc[1]);

while( fgets( buffer, 256, fp ) != NULL )
{
FILE *stdprn;
stdprn = fopen("PRN","wb");
if( line % 55 == 0 )
do_heading( argc[1] );
fprintf( stdprn, "%4d:\t%s", line++, buffer );
}

FILE *stdprn;
stdprn = fopen("PRN","wb");
fprintf( stdprn, "\f" );
fclose(fp);
return 0;
}

void do_heading( char *filename )
{
page++;

FILE *stdprn;
stdprn = fopen("PRN","wb");
if ( page > 1)
fprintf( stdprn, "\f" );

fprintf( stdprn, "Page: %d, %s\n\n", page, filename );
}


Si me podéis decir para que sirve este programa os lo agradecería. Muchas gracias ;)
Informático.

nicolas_cof

Cita de: RakNae en  3 Julio 2010, 18:32 PMMuchas gracias y aquí pongo el código que sí que funciona:

Si me podéis decir para que sirve este programa os lo agradecería. Muchas gracias ;)

Mmmmmmmm no te entiendo, acabas de decir que funciona y no sabes para que sirve :P

O decir que " funciona " queres decir que no tuviste errores/warnings al compilar :huh:

Salu10.

RakNae

Pues en teoría hace esto: Este programa imprime un listado con números de línea

Pero namás que despliega un mensaje.  :huh:
Informático.