Step 1 is don't omit the optional braces.
Code:
for(j=1;j<=111;j++) {
reorder_ge_event[j]=0;
}
It takes a fraction of a second to add them when you're editing the code (some editors will automatically add } for each { you insert).
Finding them when they're missing (and shouldn't be) can take days in a lot of code.
Next, modularise!
Code:
void showDebug( const char *msg, int len, int *event, int *energy ) {
int i;
printf("%s=%d\n", msg, len );
for(i=1;i<=len;i++)
{
printf("\tid:%d \tenergy:%d\n",event[i],energy[i]);
}
}
void clearArray ( int len, int *array ) {
int i;
for(i=1;i<=len;i++)
{
array[i] = 0;
}
}
if(ge_event_ready)
{
const int maxlen = 111;
if(ndo[1]==0) {
showDebug( "BEFORE REORDERING", ge_event_fold, ge_event_id, ge_event_energy );
}
clearArray( maxlen, reorder_ge_event );
for(i=1;i<=ge_event_fold;i++)
{
reorder_ge_event[ge_event_id[i]]=ge_event_energy[i];
}
k=0;
for(i=1;i<=maxlen;i++)
{
if(reorder_ge_event[i]!=0)
{
k++;
ge_event_id[k]=i;
ge_event_energy[k]=reorder_ge_event[i];
}
}
clearArray( maxlen, reorder_ge_event );
if(ndo[1]==0) {
showDebug( "AFTER REORDERING", ge_event_fold, ge_event_id, ge_event_energy );
}
}
When you find yourself repeating basically the same code - say by copy/paste and change a few things, then create a function to do the work.
Then you're not staring at so much detail all at once.