Δημοσιεύτηκε: 28 Ιούλ 2011, 18:38
από migf1
Σας έχω κι ένα καλό νέο τώρα που μάθαμε και την sscanf, αν θέλετε να την υιοθετήσετε ως τον τρόπο που θα διαβάζετε την κύρια είσοδο, τότε μπορείτε να καταργήσετε και την s_get (που ψυλλιάζομαι πως σας την... δίνει στον εγκέφαλο :lol:) και στη θέση της να χρησιμοποιείτε την στάνταρ: fgets(inbuf, MAXINBUF, stdin).

Η διαφορά της fgets από την s_get είναι πως η fgets βάζει μέσα στο string που διαβάζει και το ENTER που πατάει ο χρήστης στην κύρια είσοδο (ενώ η s_get το απορρίπτει). Όταν όμως κατόπιν χρησιμοποιήσουμε την sscanf για να σπάσουμε το inbuf στις μεταβλητές που θέλουμε, το ENTER στο τέλος το αγνοεί έτσι κι αλλιώς η sscanf :)

Είτε με την fgets είτε με την s_get πάντως (με ή χωρίς χρήση της sscanf σαν 2ο στάδιο) υπάρχει μια περίπτωση που θέλει προσοχή. Η περίπτωση κατά την οποία αυτό που θέλουμε να διαβάσουμε από την κύρια είσοδο είναι ένα και μόνο ένα string (προφανώς με μέγιστο μήκος μικρότερο από το μέγιστο μήκος του inbuf).

Εκεί τα πράγματα περιπλέκονται, ειδικά αν θέλουμε να διαχωρίσουμε το αν το string μας πρέπει ή δεν πρέπει να περιέχει μέσα του κενά διαστήματα. Αρκετά σας ζάλισα όμως για τώρα, πιστεύω πως κάναμε ήδη μεγάλη πρόοδο από χτες!

Προς το παρόν κρατήστε πως δεν χρειάζεστε πλέον την s_get και μπορείτε να χρησιμοποιήσετε την fgets στη θέση της (ακόμα και αν χρησιμοποιήσετε atoi, atol, κλπ αντί για sscanf μετά το διάβασμα του inbuf).