¿Lectura de archivo, escritura en el mismo archivo?

Logré abrir un archivo y leerlo mientras escribía en otro archivo convar=fopen(file,"r") / "w" pero incluso con el modo r + o w + no puedo abrir un archivo y alterar su contenido.

Imagina esto

int formatacao (char original[]){/*se a cadeia nao tiver escrita em maiusculas, esta funçao vai alteralas para tal*/
    int val1;
    FILE * original_open;

    original_open = fopen (original,"r+");

    if (original_open==0){
       printf ("ficheiro %c 1.",original);
    }


    while ((val1=fgetc(original_open))!=EOF){
          if (val1>='a'&&val1<='z'&&val1){
             fputc(val1-32,original_open);
          }
          else 
          fputc(val1,original_open);
    }

    fclose (original_open);
    return (0);
}

Code funciona, sin errores, sin advertencia, el único problema es: borra el contenido del archivo si lo uso así, PERO esto funciona:

int main (){
    int val1,val2,nr=0;
    FILE* fp1;
    FILE* fp2;
    fp1=fopen ("DNAexample.txt","r");
    fp2=fopen ("DNAexample1.txt","w");
    if (fp1==0){
       printf ("EPIC FAIL no 1.\n");
    }
    while ((val1=fgetc(fp1))!=EOF){
          if (val1>='a'&&val1<='z'&&val1){
             fputc(val1-32,fp2);
          }
          else 
          fputc(val1,fp2);
    }


    fclose (fp1);
    fclose (fp2);
    return (0);
}

¡Ilegalmente! ¿Cómo puedo abrir un archivo, leer char por char y decidir si quiero cambiar el char o no?

Respuestas a la pregunta(3)

Su respuesta a la pregunta