# programmare in c ; errore non trovato

## thebullet

ciao a tutti:

il mio compilatore "dev c"

un esercizio che prevedeva l'output di stampa non mi funziona perche "dev c " mi trova un errore nella stringa 

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

l'esercizio spiega anche che se ci sono errori probabilmente perche nel compilatore non c'e "stdprn" e quindi consiglia di usare "stdout" per visualizzare a video anziché in stampa.

ma anche cambiando questo parametro c'e comunque un'errore a quella stringa...

come posso fare???c'e davvero un errore?

premetto che sto imparando !! di conseguenza per me niente e scontato!!

grazie per l'attenzione 

buona giornata!

----------

## pilla

Moved from Portage & Programming to Forum di discussione italiano.

dev c non è un compilatore de Gentoo.

----------

## thebullet

cosa vuol dire!

----------

## riverdragon

 *thebullet wrote:*   

> cosa vuol dire!

 Vuol dire:

- hai scritto in italiano sul forum internazionale (su cui si scrive in inglese)

- hai scritto di un problema di C su una sezione relativa alla programmazione per portage

- questo compilatore "dev c" non è in portage (e quindi è molto difficile che trovi qualcuno qui che lo conosca)

- non hai spiegato che errore ottieni.

----------

## Onip

 *http://sourceforge.net/projects/dev-cpp/ wrote:*   

> 
> 
> Dev-C++ is an full-featured Integrated Development Environment (IDE) for Win32. It uses GCC, Mingw or Cygwin as compiler and libraries set. 
> 
> 

 

Mi spieghi perchè hai postato nel forum di una distribuzione linux?

Ad ogni modo il tuo compilatore è gcc, dev c è solamente l'ide "grafico" che utilizza gcc come compilatore. Io proverei con google e il messaggio di errore preciso (che non ti sei nemmeno degnato di scrivere)

----------

## Apetrini

Sei anche poco furbo perché oltre ad ever fatto alcuni sbagli che ti sono stati fatti notare, non hai fornito il codice di esempio che produce l'errore ne tanto meno l'errore in se.

Vuol dire che anche trovando qualcuno ben disposto, non sarebbe stato in grado di aiutarti.

----------

## thebullet

ok chiarissimo,grazie per l'accurata spiegazione  " onip e riverdragon "

che avete anche individuato il codice,che sarebbe:

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

ed aggiungo ora il messaggio di errore :  `stdprn' undeclared (first use in this function)

----------

## pilla

thebullet, puoi fornire troppo d'il codice? Gli #include ?

----------

## riverdragon

Per usare stdout devi avere un

```
#include <stdio.h>
```

all'inizio del codice; stdprn invece non è parte del C, quindi dipende dal compilatore che usi.

----------

## thebullet

ciao ragazzi,vi posto tutto il codice :

#include <stdlib.h>

#include <stdio.h>

void do_heading(char *stampa);

int line,page;

int main(int argv,char *argc[] )

{

    char buffer[256];

    FILE *fp;

    if (argv < 2 )

    {

             fprintf(stderr, "\nUso: " );

             fprintf(stderr, "\nstampa stampa.c\n" );

             return(1);

    }

    if (( fp = fopen( argc[1], "r" )) == NULL )

    {

          fprintf( stderr, "errore apertura file, %s!", argc[1]);

          return(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", linee++, buffer );[/color][/code]

    }

    fprintf(stdprn, "\f" );

    fclose(fp);

    return 0;

}

void do_heading( char *stampa.c )

{

     page++;

[code]     

     if ( page > 1) 

     fprintf(stdprn, "\f" );

     fprintf( stdprn, "page: %d, %s\n\n", page, stampa );

     }

----------

## thebullet

la riga dove da l'errore e quella blu!

----------

## canduc17

Sostituisci "stdprn" con "stdout" o "sterr".

----------

## thebullet

ciao,con tutti e due mi da questi errori :

 51 `stampa' undeclared (first use in this function) 

5  prototype declaration 

45 number of arguments doesn't match prototype 

44  syntax error before '.' token 

36  `linee' undeclared (first use in this function)

----------

## canduc17

IL manuale

----------

## thebullet

il manuale c'e l'ho,in che sezione sono riportati gli errori!

cioè nell'indice sotto che dicitura dovrebbe essere!

grazie in anticipo!

----------

## canduc17

Studiati come funzionano gli argomenti di main(), cioe' argc ed argv.

Studiati come si definiscono le funzioni.

E soprattutto leggi gli errori del tuo compilatore!!!

linee non era dichiarato, c'e' una e di troppo: la variabile giusta e' line.

Negll'argomento della funzione do_heding il nome ha un punto, non ci deve essere. (lo puoi chiamare anche pippo)

Questo a me funziona:

```
#include <stdlib.h>

#include <stdio.h>

void do_heading(char *stampa);

int line, page;

int main(int argv, char *argc[] )

{

    char buffer[256];

    FILE *fp;

    if (argv < 2 )

    {

        fprintf(stderr, "Uso:\n" );

        fprintf(stderr, "./stampa stampa.c\n" );

        return(1);

    }

    if (( fp = fopen( argc[1], "r" )) == NULL )

    {

        fprintf( stderr, "errore apertura file, %s\n!", argc[1]);

        return(1);

    }

    page = 0;

    line = 1;

    do_heading( argc[1]);

    while( fgets( buffer, 256, fp ) !=NULL )

    {

        if( line % 55 == 0 )

            do_heading( argc[1] );

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

    }

    fprintf(stderr, "\f" );

    fclose(fp);

    return 0;

}

void do_heading( char *stampa )

{

    page++;

    if ( page > 1)

        fprintf(stderr, "\f" );

    fprintf( stderr, "page: %d, %s\n\n", page, stampa );

}
```

Una volta compilato, lo devi lanciare cosi':

```
./stampa stampa.c
```

Puoi sotituire stampa.c con un qualsiasi altro file di testo, basta che esista nella cartella del tuo programma.

----------

## thebullet

ok,grazie tantissimo 

in effetti togliendo stdout e sostituendo con sterr;

correggendo linee;

non mi da errori,

ma all'eseguzione la finestra dos se  ne va subito,anche aggiungendo alla fine "system pause".

questo e un programma che come esercizio mi da il libro con cui sto imparando!

comunque grazie il problema e risolto,almeno non mi da errori,

rimane solo questa cosa che non mi da la possibilità di capire l'output del programma perche la finestra dos sparisce subito,

puoi dirmi se non ti spiace come posso fare per fermare la finestra al posto di system pause che tra l'altro tutti ne sconsigliano  l'uso,ma io non conosco ancora vie secondarie.

grazie

----------

## k01

apri il prompt dei comandi prima, e lanci da lì il programma appena compilato

----------

## thebullet

grande ,bellissimo!

semplice anche,grazie ancora!

 :Very Happy: 

----------

