modifier le contenu existant de fichier en c

int main()
{
    FILE *ft;
    char ch;
    ft=fopen("abc.txt","r+");
    if(ft==NULL)
    {
        printf("can not open target file\n");
        exit(1);
    }
    while(1)
    {
        ch=fgetc(ft);
        if(ch==EOF)
        {
            printf("done");
            break;
        }
        if(ch=='i')
        {
            fputc('a',ft);
        }
    }
    fclose(ft);
    return 0;
}

Comme on peut le voir que je veux modifier abc.txt de telle manière que i est remplacé par a.
Le programme fonctionne très bien mais quand j'ai ouvert abc.txt de l'extérieur, il semblait être modifiée.
Toute raison possible pour que?

Pourquoi, dans ce cas, le caractère après i n'est pas le remplacer par a, car les réponses suggèrent?

Essayez fflush()-ing le descripteur peut-être...
fclose(ft) avant de retourner.
fgetc() retourne un int, pas un char; elle doit retourner chaque valable char valeur, majorée d'une valeur individuelle, les expressions du FOLKLORE. Comme l'écrit, vous ne pouvez pas détecter de manière fiable des expressions du FOLKLORE. Si char est un type non signé, vous ne trouverez pas d'expressions du FOLKLORE; si char est un type signé, vous aurez classifier certains caractères valide (souvent ÿ, y tréma, U+00FF, la LETTRE minuscule LATINE Y TRÉMA) comme des expressions du FOLKLORE.

OriginalL'auteur zee | 2014-02-22