#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);
return;
}