Il problema l' ho avuto pure io usando DevC. Quando apri un file in "r+b" in teoria sui libri si studia che si può sia leggere e scrivere su file. Bhe con devC non funziona così. Se una volta aperto il file cominci con un fwrite potrai solo usare fwrite e viceversa con fread. io ho risolto usando un file d' appoggio, copiandogli quello che c' era nell' altro file, lavorare sul file d' appoggio poi alla fine rimuovere il file vecchio e rinominare il file d' appoggio con il nome del file vecchio.

Questa è una funzione in cui ho usato questo metodo. remove e rename sono funzioni del sistema operativo quindi non è detto che funzioni su tutti i sistemi. io a scuola e a casa ho windows e probabilmente ce l' hai anche tu. te lo dico caso mai ci fosse quella rara eventualità
codice:
void modifica_tutti(stringa nome){
    FILE *temp,*f;
    stringa city;
    int box,pos;
    f=fopen(nome,"rb");
    temp=fopen("temp.txt","wb");
    if(f!=NULL){
                while(fread(city,sizeof(stringa),1,f)!=0){
                                                          fread(&box,sizeof(int),1,f); 
                                                          pos+=(pos*10)/100;
                                                          fwrite(city,sizeof(stringa),1,temp);
                                                          fwrite(&pos,sizeof(int),1,temp);
                                                          }
                fclose(f);
                fclose(temp);
                remove(nome);
                rename("temp.txt",nome);
                }      
}

Spero di esserti stato d' aiuto