Δημοσιεύτηκε: 11 Σεπ 2011, 18:30
από migf1
Star_Light έγραψε:Παιδια... δεν ξερω αν προχωρησετε εσεις... αλλα εγω εβαλα "αλλο προγραμμα" πρωτα καταλαβα τις δομες καλα με προσπελαση μεσω τελεστη τελειας... + typedef μετα θα κανω τα ιδια αλλα με τελεστες -> (δεικτες) και τελος θα παιξω με συναρτησεις και δομες και μετα και με δεικτες σε απλα παραδειγματα και αφου καταλαβω αυτα μετα θα παω στο παραδειγμα του migf1 , δυστυχως ή ευτυχως ;)

Κάτι τέτοιο σε βοηθάει καθόλου;
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>

#define MAXINBUF 254+1

#define MAXLEN_NAME 10+1
#define MAXLEN_LNAME 15+1
#define MAXLEN_TEL 10+1

typedef struct person {
char fname[ MAXLEN_NAME ];
char lname[ MAXLEN_LNAME ];
char tel[ MAXLEN_TEL ];
} Person;

// ------------------------------------------------------------------------------------
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_data( Person *persons, const int maxpersons )
{
register int i = 0;

for (i=0; i < maxpersons; i++ )
{
printf("Εγγραφή #%d\n----------\n", i+1);

printf("Όνομα : ");
s_getflushed( persons[ i ].fname, MAXLEN_NAME );

printf("Επώνυμο: ");
s_getflushed( persons[ i ].lname, MAXLEN_LNAME );

printf("Τηλ : ");
s_getflushed( persons[ i ].tel, MAXLEN_TEL );

putchar('\n');
}

return;
}

// ------------------------------------------------------------------------------------
void print_data( Person *persons, const int maxpersons )
{
register int i = 0;

puts("Ε Μ Φ Α Ν Ι Σ Η Λ Ι Σ Τ Α Σ Ε Γ Γ Ρ Α Φ Ω Ν\n");
puts("Θέση\tΌνομα\t\tΕπώνυμο\t\t\tΤηλέφωνο\n-----\t-----\t\t-------\t\t\t--------");

for (i=0; i < maxpersons; i++ )
printf("%02d\t%-15s\t%-20s\t%-15s\n", i+1, persons[i].fname, persons[i].lname, persons[i].tel );

putchar('\n');


return;
}
// ------------------------------------------------------------------------------------
int main( void )
{
char inbuf[ MAXINBUF ] = {'\0'};
int maxpersons = 0;
Person *persons = NULL;

printf("Πόσες εγγραφές; ");
s_getflushed( inbuf, MAXINBUF );
maxpersons = atoi( inbuf );

putchar('\n');

persons = calloc( maxpersons, sizeof( Person ) );
if ( !persons ) {
puts("*** ανεπρακής μνήμη, τερματισμός προγράμματος");
exit( EXIT_FAILURE );
}

read_data( persons, maxpersons );
print_data( persons, maxpersons );

if ( persons ) {
free( persons );
persons = NULL;
}

exit( EXIT_SUCCESS );
}