Con un po' di "schermature" per non infrangere il mitico regolamento, ecco come farei io.
#include <stdio.h>
void DataLimite( FILE *fp, float limite ) {
if( /*verifica parametri*/ ) {
float saldo, movimento;
char buff[16];
int g, m;
// qui leggi il saldo dal file, come hai gia' fatto
while( /*rilevi i dati a gruppi, riga per riga*/ ) {
// quando si dice la sintesi :) confronta il saldo col limite
if( (saldo+=('+'==*buff?1:-1)*movimento)<limite ) {
printf( /*mostra la data e il tetto dello "sforamento"*/ );
return; // fatto! torna a casa Lessie
}
}
// se siamo arrivati fin qui, vuol dire che non c'e' stato sforamento
printf( /*segnala che non c'e' stato sforamento*/ );
} else puts( /*messaggio d'errore*/ );
}
int main() {
float limite = 0.0f;
FILE *fp;
while( limite>=0.0f ) {
printf( "Valore limite (negativo): " );
scanf( "%g", &limite );
}
if( /*apre il file in fp e verifica l'esito*/ ) {
DataLimite( fp, limite );
fclose( fp );
} else puts( /*messaggio d'errore*/ );
return 0;
}