non hai inizializzato i è questo porta delle conseguenze .

altro piccolo particolare ,il programma è tutto da rifare

all' interno del while hai un for, che si aspetta che inserisci 200 caratteri prima di terminare.

la scanf , all'interno del for si aspetta che ad ogni carattere immesso premi invio .

all' uscita del for , se non hai scritto fine , il while continuerebbe ,e provrerebbe ad inserire altri caratteri nell array , che non puo contenerli .


io suggerisco di usare una funzione non standar getch

codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// programma che fa smettere all'utente di immettere caratteri quando digita la parola 'fine'

int main()
{
    char stringa[200];
    char terminatore[5];
    int i=0,j,k;

    printf("Inserisci il testo\n");
    
    do
    {
              stringa[i]=getch();
              putch(stringa[i]);
              if(stringa[i]==13)
              {
                     putch(13);
                     putch(10);
               }
               i++;
       
              if(i>=3)// preleva gli ultimi 4 caratteri 
              {
                        for(j=strlen(stringa)-4,k=0;k<4;k++,j++)
                                            terminatore[k]=stringa[j]; 
            
                        terminatore[k]=0;
           
            
              }
              if(strcmp(terminatore,"fine")==0)break;  
        }while(1 );
    puts("");
    printf("STAMPA STRINGA\n %s \n", stringa);

    system("pause");
    return 0;
}
HO PROVATO A FARE IL MAESTRO ma devo fare l'alievo
ma anche il codice che ho postato io , non si comporta propio a dovere a volte termina
altre no , comunque per i motivi che ti ho detto , il programma che hai postato, non può
comportarsi come ti aspetteresti .
aspetto , che le persone piu competenti , mi spieghino pechè ,anche il mio codice da problemi , come logica mi sembra che vada !!