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