alehunter έγραψε:αρα η cin μου διαβαζει συγκεκριμενο πληθος χαρακτηρων??
Η cin θα διαβάσει ό,τι της πεις να διαβάσει (για την ακρίβεια το cin είναι stream αλλά ας συνεχίσουμε με τη "δική" μας ορολογία). Όταν γράφεις
cin >> c; και το c είναι δηλωμένο char, δηλαδή ένας χαρακτήρας, η cin θα διαβάσει
έναν χαρακτήρα και θα τον αποθηκεύσει στο c.
Όταν γράψεις cin >> s; και το s είναι δηλωμένο string τότε θα διαβάσει μέχρι το
τέλος του stream και θα αποθηκεύσει στο s.
Στο δικό σου παράδειγμα αν έχεις
cin >> a; cin >> b; και τα a και b είναι δηλωμένα char (και τα δύο) ...
Αν δώσεις σαν είσοδο από το πληκτρολόγιο "james" και μετά πατήσεις το enter, το πρόγραμμα θα αποθηκεύσει τον χαρακτήρα 'j' στο a και
χωρίς να σε ξαναρωτήσει θα αποθηκεύσει στο b τον χαρακτήρα 'a'. Το ίδιο θα συμβεί αν έχεις άλλες 3 cin που διαβάζουν χαρακτήρα (μέχρι να τελειώσουν τα γράμματα). Το πρόγραμμά σου θα τρέξει αν δίνεις μόνο έναν χαρακτήρα όταν σου ζητάει είσοδο (πράγμα που ανέφερα και στο πρώτο μου post), διαφορετικά θα πρέπει να μετατρέψεις τις μεταβλητές σε std::string.
alehunter έγραψε:νομιζα διαβαζει μια οποιαδηποτε λεξη/string μεχρι να πατησω space ή enter
Το space δε διαφέρει σε κάτι από τους υπόλοιπους χαρακτήρες οπότε όχι, δε σταματάει εκεί. Επίσης ο υπολογιστής δεν καταλαβαίνει τι εννοείς εσύ 'λέξη'. Υπάρχουν πάρα πολλοί χαρακτήρες στους οποίους σπάει μια λέξη και αυτό από μόνο του είναι σίγουρα ένα τεράστιο κεφάλαιο lexical analysis για το οποίο έχουν γραφτεί και βιβλία. Θα μπορούσε να είναι και το tab ή η παύλα ή το underscore. Το space δεν είναι κάτι ορόσημο, είναι απλώς ένας χαρακτήρας (που δε φαίνεται) ή αλλιώς glyph. Το enter δε διαφέρει επίσης από το space, είναι και αυτός ένας χαρακτήρας που επίσης δε φαίνεται. Απλά χρησιμοποιείται σαν μια μέθοδος EOF triggering, δηλαδή σαν ένα τρόπο για να πεις στη cin (ή στο underlying framework) να σταματήσει να διαβάζει από την είσοδο. Για την ακρίβεια η σωστή έκφραση είναι να σταματήσει να ... γράφει(!) στην είσοδο αλλά ας μην το ανοίξουμε αυτό το θέμα.