#include <stdio.h>
#include <stdlib.h>				// για atoi()

// Macros

#define MAXSLEN	(254 + 1)			// MAXimum String LENgth

// Πρόσθετοι Τύποι Δεδομένων

typedef struct person				// ορισμός δομής person ως πρόσθετο τύπο
{						// με το όνομα Person (λόγω του typedef)
	char name[ MAXSLEN ];			// ... 1ο πεδίο της δομής
	char surname[ MAXSLEN ];		// ... 2ο πεδίο της δομής
	int age;				// ... 3ο πεδίο της δομής
} Person;					// το όνομα του πρόσθετου τύπου

// Πρότυπα Συναρτήσεων

char *s_getflushed(char *s, size_t len);	// αντί fgets, για να μην κρατάει το '\n'
void read_person( Person *someone );		// για διάβασμα των πεδίων της someone
void print_person( Person someone );		// για τύπωμα των πεδίων της someone

// -------------------------------------------------------------------------------
int main( void )
{
	Person someone;				// η someone είναι μεταβλητή τύπου Person

	read_person( &someone );		// πέρασμα της someone by reference
	print_person( someone );		// πέρασμα της someone by value

	return 0;
}
// -------------------------------------------------------------------------------
char *s_getflushed(char *s, size_t len)
{
	char *cp;
	for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
		;

	if ( *cp != '\n') {				// len reached withoutn '\n'
		*cp = '\0';				// null terminate s and
		while (getchar() != '\n')		// flush remaining chars
			;
	}
	else						// '\n' found
		*cp = '\0';				// null-terminate

	return s;
}
// -------------------------------------------------------------------------------
void read_person( Person *someone )		// by reference πέρασμα της someone
{						// άρα χρήση του -> για τα πεδία της
	char inbuf[ 254+1 ] = {'\0'};

	printf("Dwse to onoma sou: ");
	s_getflushed( someone->name, MAXSLEN );

	printf("Dwse to epwnumo sou: ");
	s_getflushed( someone->surname, MAXSLEN );

	printf("Dwse tin ilikia sou: ");
	s_getflushed( inbuf, MAXSLEN );
	someone->age = atoi( inbuf );

	return;
}
// -------------------------------------------------------------------------------
void print_person( Person someone )		// by value πέρασμα της someone
{						// άρα χρήση τελείας για τα πεδία της
	puts("========================================");

	printf("To onoma pou edwses einai: %s\n", someone.name);
	printf("To epwnimo pou edwses einai: %s\n", someone.surname);
	printf("H ilikia pou edwses einai: %d\n", someone.age);

	putchar('\n');

	return;
}
