Δημοσιεύτηκε: 04 Ιουν 2011, 10:50
Ναι, τα γνωρίζω αυτά. Έγραψα ήδη πως υποτίθεται πως δεν την υποστηρίζουν όλοι οι compilers, αλλά στην πράξη δεν έχω βρει ούτε έναν που να μην την υποστηρίζει (εννοείται με stdin). Η εναλλακτική αν θες να μένεις πιστός στο στάνταρ είναι κάτι σαν κι αυτό εδώ: http://www.programmersheaven.com/mb/Can ... wont-work/ το οποίο σε human language μεταφράζεται ως "regular expressions".
Έγκειται στον προγραμματιστή να αποφασίσει αν θα πάρει το ρίσκο της μη συμβατότητας (που στην προκειμένη περίπτωση είναι ελάχιστο) έναντι του μεγάλου κόστους σε επιδόσεις όταν χρησιμοποιούμε regular expressions (ειδικά όταν χρησιμοποιείται σε όλα τα scanf(), το οποίο scanf() με τη σειρά του εκτελείται πολύ πιο αργά και χωρίς regular expressions συγκριτικά με τις εξειδικευμένες συναρτήσεις διαβάσματος strings ή απλών χαρακτήρων). Στον κώδικα που παρουσιάζεται στην αρχή του τόπικ έχει και το έξτρα μειονέκτημα πως κόβει την κάθε γραμμή του αρχείου που διαβάζει στους 63+1 χαρακτήρες. Επίσης, άσχετο, δεν κλείνει το αρχείο που έχει ανοίξει.
Ο gcc που είναι με διαφορά ο περισσότερο ported compiler σε όλες τις πλατφόρμες υποστηρίζει fflush(stdin) (όπως και η μεγάλη πλειοψηφία των σύγχρονων compilers) οπότε μένει να αποφασίσεις αν όντως αξίζει να εισαγάγεις handicap ή/και να επιβαρύνεις τον κώδικά σου
Έγκειται στον προγραμματιστή να αποφασίσει αν θα πάρει το ρίσκο της μη συμβατότητας (που στην προκειμένη περίπτωση είναι ελάχιστο) έναντι του μεγάλου κόστους σε επιδόσεις όταν χρησιμοποιούμε regular expressions (ειδικά όταν χρησιμοποιείται σε όλα τα scanf(), το οποίο scanf() με τη σειρά του εκτελείται πολύ πιο αργά και χωρίς regular expressions συγκριτικά με τις εξειδικευμένες συναρτήσεις διαβάσματος strings ή απλών χαρακτήρων). Στον κώδικα που παρουσιάζεται στην αρχή του τόπικ έχει και το έξτρα μειονέκτημα πως κόβει την κάθε γραμμή του αρχείου που διαβάζει στους 63+1 χαρακτήρες. Επίσης, άσχετο, δεν κλείνει το αρχείο που έχει ανοίξει.
Ο gcc που είναι με διαφορά ο περισσότερο ported compiler σε όλες τις πλατφόρμες υποστηρίζει fflush(stdin) (όπως και η μεγάλη πλειοψηφία των σύγχρονων compilers) οπότε μένει να αποφασίσεις αν όντως αξίζει να εισαγάγεις handicap ή/και να επιβαρύνεις τον κώδικά σου

medigeek έγραψε:migf1 έγραψε:
Σε μένα δουλεύει μια χαρά πάντως βάζοντάς το στον κώδικά σου (δεν υπάρχει λόγος να μη δουλεύει). Σχετικά με το ότι δεν συνιστάται, υποτίθεται πως δεν την υποστηρίζουν όλοι οι compilers, αλλά αν όντως υπάρχουν compilers που δεν την υποστηρίζουν (δεν έχω βρει κανέναν μέχρι τώρα εγώ) τότε φταίνε αυτοί οι compilers, αφού η συνάρτηση ανήκει στις στάνταρ της γλώσσας
Βρήκα το link:
* http://faq.cprogramming.com/cgi-bin/sma ... 1043284351
* http://stackoverflow.com/questions/2979 ... flushstdin
Δεν συνιστάται επειδή το c standard θεωρεί τη χρήση του για file output flushing (για γραψιμο σε αρχεία αν κατάλαβα καλά). Σύμφωνα με το C standard, είναι λάθος, ακόμη κι αν δουλεύει.