#include<stdio.h>
#include<string.h>
#define N 10
#define FFLUSH 	while (getchar()!='\n')

char s[N];
unsigned int i;

int main(void)
{
    printf("\nNel seguito vengono mostrati diversi modi di leggere una stringa ");
	printf("\nLa stringa disponibile e' lunga %u caratteri ", N);
	printf("\nAlcune soluzione non permettono di leggere gli spazi ");
	printf("\nAltre soluzioni consentono di inserire piu' di %u caartteri ",N);
	
	printf("\n\nUSO SCANF ERRATO ");
	printf("\nInserisci una stringa ");
	scanf("%s",s);
	printf("\nLa stringa inserita e': %s ",s);
	printf("\ned ha lunghezza %u ",strlen(s));
	
	/*Si deve usare FFLUSH a causa di scanf */
	FFLUSH;
	
	printf("\n\nUSO SCANF che gestisce gli spazi ma non la lunghezza");
	printf("\nInserisci una stringa ");
	scanf("%[^\n]s",s);
	printf("\nLa stringa inserita e': %s ",s);
	printf("\ned ha lunghezza %u ",strlen(s));
	
	/*Si deve usare FFLUSH a causa di scanf */
	FFLUSH;
	
	printf("\n\nUSO GETS che gestisce gli spazi ma non la lunghezza");
	printf("\nInserisci una stringa ");
	gets(s);
	printf("\nLa stringa inserita e': %s ",s);
	printf("\ned ha lunghezza %u ",strlen(s));
	
	printf("\n\nUSO FGETS che gestisce gli spazi e la lunghezza");
	printf("\nFGETS legge al massimo i successivi N-1 caratteri ");
	printf("\noppure si ferma se trova un carattere di newline ");
	printf("\nche e' inserito nel vettore prima del carattere fine stringa");
	printf("\n\nInserisci una stringa ");
	fgets(s,N,stdin);
	i=strlen(s);
	printf("\nLa stringa inserita e': %s ",s);
	printf("\ned ha lunghezza %u ",i);
	if (i<N-1) s[i-1]='\0';
	else while (getchar()!='\n');
	printf("\nLa stringa inserita e': %s ",s);
	printf("\ned ha lunghezza %u ",strlen(s));
	
	printf("\n\nLETTURA STRINGA CORRETTO basata sull'uso di getchar()");
	printf("\nInserisci una stringa ");
	for (i=0; i<N-1;i++) 
       if ((s[i]=getchar())=='\n') break;
	if (i==N-1) while (getchar()!='\n');
	s[i]='\0';
	printf("\nLa stringa inserita e': %s ",s);
	printf("\ned ha lunghezza %u \n\n\n",strlen(s));

}


