Visto che vuoi svolgere l'esercizio su più file puoi prevedere una coppia binario.h/binario.c dove raccogliere le funzioni per la conversione.
Il file binario.h potrebbe essere una cosa del genere:
#ifndef BINARIO_H_INCLUDED
#define BINARIO_H_INCLUDED
#include <stdlib.h>
/* valgono per numeri fino a 32 bit */
#define MAX_BITS 32
#define MAX_CIFRE 10
void binario( char *s, int n );
#endif // BINARIO_H_INCLUDED
In questo modo potresti chiamare la funzione da main.c semplicemente includendo "binario.h".
Tra l'altro, potresti includere la possibilità di avere il buffer per la stringa del numero in formato binario "incorporato" nella funzione binario() stotto forma di spazio statico da usare nel caso che il parametro s sia NULL, così potresti anche risparmiarti l'onere di pensare alla gestione del buffer in main().
#include <stdio.h>
#include "binario.h"
int main() {
char nomeFInput[] = "prova.txt"; /* preimpostato, SOLO per brevita' */
FILE* fIn = NULL; /* fIn = file in input */
if( (fIn=fopen(nomeFInput,"r")) != NULL ) {
int nIn; /* nIn = numero in input */
int ff; /* ff = fine file */
while( !(ff=feof(fIn)) ) {
/* rileva il prossimo numero */
fscanf( fIn, "%d", &nIn );
/* mostra il risultato */
/* ci pensa la libreria standard */
printf( "decimale: %d\n", nIn );
/* demanda a una nostra funzione, nei file binario.h/binario.c */
printf( "binario: %s\n\n", binario(NULL,nIn) );
}
fclose( fIn ); fIn = NULL; // chiude il file
} else fprintf( stderr, "Nome del file non valido\n\n" );
getchar(); /* attende che si prema "invio" prima di uscire */
return 0;
}
Nel file binario.c ci sarebbe l'implementazione della funzione binario() e di una funzione "accessoria" per invertire l'ordine delle cifre nella stringa col numero in formato binario.
#include "binario.h"
char *agnirts( char *s ); // prototipo
/*==============================================================================
Imposta in s la rappresentazione come stringa di cifre binarie del valore
passato in n.
==============================================================================*/
char *binario( char *s, int n ) {
static char ss[MAX_BITS+2]; // "ss" = stringa statica
int neg = n<0;
char *p;
if( s == NULL ) s = ss; // in mancanza di un buffer, usiamo quello statico
/* mistero, per non inquietare i moderatori :) */
return s;
}
/*==============================================================================
Rovescia la stringa s, riscrivendola "all'indietro".
Restituisce l'indirizzo alla stessa stringa ricevuta in s.
==============================================================================*/
char *agnirts( char *s ) {
if( s != NULL ) { /* s deve essere un puntatore valido */
/* mistero, per non inquietare i moderatori :) */
}
return s;
}