Salve,
mi scuso in anticipo se la sezione è sbagliata o non indico tutte le info necessarie.
Comunque sono sotto ubuntu e compilo il seguente programma con: gcc -o menu menu.c
codice:
// menu con fgets
#include <stdio.h>
#define fflush(stdin) while ((getchar()) != '\n')
int main(){
       
        printf("'aggiungi'  \n");
        printf("'cerca' \n");
        printf("\n ---------------------------------\n");
        printf("'exit' \n");    
        printf("\nDigita una opzione: "); 


        char agg[]="aggiungi\n";
        char cerca[]="cerca\n";
        char exit[]="exit\n";
        int count=3;
        //char spazio[]="/n";
        char temp[11];




        fgets(temp,11,stdin);
fflush(stdin);
                
        
        
        while (count > 1){    
        
        if(strcmp(temp,agg)==0) {printf("1\n");return 1;}
        if(strcmp(temp,cerca)==0){ printf("2\n");return 2;}
        if(strcmp(temp,exit)==0) {printf ("3\n");return 3;}
        count--;
                
        printf("errore immissione hai a disposizione ancora %d tentativi,digita una opzione:",count);


        fgets(temp,11,stdin);
fflush(stdin);


        }
}
il programma funziona, il problema sta nel fatto che quando immetto da tastiera una opzione valida
devo premere una ulteriore volta "invio", questo è sicuramente dato da come è stata implementata la "fflush" ma se viene omessa, nel caso in cui digito una stringa troppo grande da tastiera l' stdin rimane sporco e il programma termina (probabilmente per le successiva fgets legge quello che è rimasto nello stdin )
NB
non posso usare la scanf poiché a quanto ho capito è vulnerabile

Vi ringrazio in anticipo, so che può sembrare una cosa stupida da fare ma veramente mi sta creando problemi