Δημοσιεύτηκε: 08 Αύγ 2011, 01:37
από migf1
Χαλαρά, περιμένω αν είναι :)

Στο μεταξύ πρόσθεσα μια ΠΟΛΥ χρήσιμη λειτουργία στη συνάρτηση: s_get() που σας έχω δώσει να χρησιμοποιείται αντί της καταργημένης gets(). Λοιπόν της πρόσθεσα τη δυνατότητα να κάνει ταυτόχρονα και fflush(stdin) ανεξαρτήτως πλατφόρμας :ugeek:

Την ονόμασα: s_getflushed
Κώδικας: Επιλογή όλων

// -----------------------------------------------------------------------------------
// ΣΥΝΑΡΤΗΣΗ: s_getflushed
// βελτιωμένη παραλλαγή της fgets για την κύρια είσοδο (σβήνει το '\n' + fflush)
//
// Διαβάζει από την κύρια είσοδο έως len-1 χαρακτήρες ή μέχρι να πατηθεί ENTER,
// τους καταχωρεί στο s και το επιστρέφει με μηδενισμένο τον τελικό χαρακτήρα.
// Αν πληκτρολογήθηκαν len-1 χαρακτήρες πριν πατηθεί το ENTER, τότε οι περιττοί
// χαρακτήρες αφαιρούνται από το buffer της εισόδου (stdin).
//
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;
}

Οπότε μπορείτε να τη χρησιμοποιείται πάντα και σε οποιαδήποτε πλατφόρμα όποτε θέλετε να διαβάζετε την κύρια είσοδο μονοκόμματα ως ένα string, χωρίς να έχετε ποτέ πρόβλημα με τυχόν απομεινάρια (αυτή η συνάρτηση τα καθαρίζει :) )

Δηλαδή, για παράδειγμα στον παρακάτω κώδικα:
Κώδικας: Επιλογή όλων

#define MAXINBUF 6+1
int main( void )
{
char inbuf[ MAXINBUF ];
int n;

s_getflushed( inbuf, MAXINBUF ];
n = atoi( inbuf );

return 0;
}

ακόμα κι αν ο χρήστης μας πληκτρολογήσει 100 χαρακτήρες στην κύρια είσοδο, η s_getflushed() θα βάλει μέσα στο inbuf μονάχα τους 6 πρώτους (+ 1 για τον μηδενικό χαρακτήρα στο τέλος) και θα καθαρίσει όλους τους υπόλοιπους από την κύρια είσοδο, ώστε την επόμενη φορά που θα πάμε να διαβάσουμε κάτι από την κύρια είσοδο δεν θα υπάρχουν απομεινάρια από πριν.

Άρα ο παραπάνω κώδικας μετατρέπει σε ακέραιο νούμερο και το καταχωρεί στη μεταβλητή n μέχρι το πολύ 6 χαρακτήρες από αυτούς που θα πληκτρολογήσει ο χρήστης :)