chrism4111 Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 Γεια σας είμαι νέος στον προγραμματισμο της C++.. Απλα επειδη γραφω στην σχολη μ C++ το σαββατο μου δημιουργηθηκε μια απορια ... Φτιαχνω μια class (που αφορα ενα βιβλιο) με Private μεταβλητες πχ [string or char με μηκος 30 στην πειπτωση char]ISBN,[αντιστοιχα με το ISBN]title,[float]price.... Και κατα ακολουθια public μεταβλητες τους constractor [default,και υπερφορτομενο] , seters ,geters και καποιες αλλες functions... To προβλημα μ ειναι οτι οταν δινω τιμη ειτε σε string ειτε σε char απο το πληκτρολογιο την ωρα που τρεχω το προγραμμα το κενο δεν μου το περναει(λογικο γιατι οταν δινεις κενο σε παει στην επομενη μεταβλητη που εχεις δηλωσει οτι ο χρηστης θα πληκτρολογησει).. Υπαρχει τροπος να αποφυγω αυτο και να μπορω να βαζω τον κενο χαρακτηρα κατα την πληκτρολογηση???
drm Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 Φαντάζομαι θα υπάρχει και άλλη λύση αλλά δοκίμασε κάτι τέτοιο > i = 0 while(1) { ch=getche(); if (ch=='\n') exit; String[i++] = ch; } προσοχή, το αποπάνω δεν είναι κώδικας σε C αλλά ψευδοκώδικας που τυχαίνει να μοιάζει με C.
parsifal Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 http://www.cplusplus.com/reference/string/getline/
chrism4111 Δημοσ. 1 Ιουλίου 2010 Μέλος Δημοσ. 1 Ιουλίου 2010 http://www.cplusplus.com/reference/string/getline/ Ευχαριστω για την ταχυτητα στις απαντησεις και για τις απαντησεις..... >void book::input(){ char inisbn[30]; string intitle; float inprice; cout<<"Dose to ISBN :"<<endl; cin>>inisbn; cout<<"Dose ton Titlo :"<<endl; [color="Red"] getline(cin,intitle);[/color] cout<<"Dose tin Timi :"<<endl; cin>>inprice; cout<<endl<<endl; strcpy(ISBN,inisbn); title=intitle; price=inprice; } Χρησιμοποιω το getline καπως ετσι και αυτο που κανει ειναι να μου αλλαζει σειρα και να με παει στο cin>>inprice; Δεν το χρησιμοποιησα σωστα?
parsifal Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 Σωστά το χρησιμοποιείς. Τί εννοείς «σου αλλάζει σειρά»; Δεν τυπώνεται το μήνυμα "Dose tin Timi :" ;
chrism4111 Δημοσ. 1 Ιουλίου 2010 Μέλος Δημοσ. 1 Ιουλίου 2010 Σωστά το χρησιμοποιείς. Τί εννοείς «σου αλλάζει σειρά»; Δεν τυπώνεται το μήνυμα "Dose tin Timi :" ; Μου διχνει το μυνημα και αμεσως χωρις να πληκτρολογισω τον τιτλο με παει στην επομενη εντολη δηλαδη στην πληκτρολογηση του price..
3c0r1z Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 >void book::input(){ char inisbn[30]; string intitle; float inprice; cout<<"Dose to ISBN :"<<endl; cin>>inisbn; cout<<"Dose ton Titlo :"<<endl; cin.ignore(); // <---- getline(cin,intitle); cout<<"Dose tin Timi :"<<endl; cin>>inprice; cout<<endl<<endl; strcpy(ISBN,inisbn); title=intitle; price=inprice; } http://www.cplusplus.com/reference/iostream/istream/ignore/
MitsakosGR Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 Μου διχνει το μυνημα και αμεσως χωρις να πληκτρολογισω τον τιτλο με παει στην επομενη εντολη δηλαδη στην πληκτρολογηση του price.. Μερικές φορές το cin αφήνει μέσα στην buffer του το \n που είναι το διαχωριστικό για το getline. Έτσι πριν χρησιμοποιήσεις το getline πρέπει να αδειάσεις το buffer του cin από τις αλλαγές γραμμών. Δοκίμασε κάποιο από τα ακόλουθα πριν το getline(). 1. Να κάνεις cin.sync(). Απορρίπτει όσους χαρακτήρες παραμένουν στο cin 2. Να κάνεις cin.ignore() (δεν λαμβάνει υπόψιν τον τελευταίο χαρακτήρα που βρίσκεται στο cin). Μπορεί να θέλει 2 φορές. 3. Να δώσεις την εντολή cin.ignore(1000, '\n'); Αφαιρεί 1000 αλλαγές γραμμών από το cin (η πιο αργή αλλά κατά κάποιο τρόπο λίγο πιο αξιόπιστη μέθοδος) --Με πρόλαβε ο 3c0r1z 2. Δεν υπάρχει το cin.flush()
chrism4111 Δημοσ. 1 Ιουλίου 2010 Μέλος Δημοσ. 1 Ιουλίου 2010 >void book::input(){ char inisbn[30]; string intitle; float inprice; cout<<"Dose to ISBN :"<<endl; cin>>inisbn; cout<<"Dose ton Titlo :"<<endl; cin.ignore(); // <---- getline(cin,intitle); cout<<"Dose tin Timi :"<<endl; cin>>inprice; cout<<endl<<endl; strcpy(ISBN,inisbn); title=intitle; price=inprice; } http://www.cplusplus.com/reference/iostream/istream/ignore/ Δουλεψε αλλα στ περιπου δηλαδη αν πληκτρολογησω πχ "αααα βββββ" στην εκτηπωση δινει αυτο: " βββββ" OK λυθηκε απλα χαζόμαρα μ που βιαστηκα να απαντησω ειχα ενα cin>>intitle επιπλεον και μου εκανε ζημια ...... Thanks for the support
3c0r1z Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 Αν πληκτρολογήσεις που; Αν το κάνεις για το isbn τότε όντως έχει πρόβλημα αλλά για το τίτλο δουλεύει μια χαρά. Κατά πάσα πιθανότητα το πρόβλημα βρίσκεται αλλού στο κώδικα.
chrism4111 Δημοσ. 1 Ιουλίου 2010 Μέλος Δημοσ. 1 Ιουλίου 2010 Αν πληκτρολογήσεις που; Αν το κάνεις για το isbn τότε όντως έχει πρόβλημα αλλά για το τίτλο δουλεύει μια χαρά. Κατά πάσα πιθανότητα το πρόβλημα βρίσκεται αλλού στο κώδικα. Sorry φιλος εκανα edit λιγο μετα το μυνημα σ. και οντως κατι δεν πηγενε καλα με τον κωδικα μ..
3c0r1z Δημοσ. 1 Ιουλίου 2010 Δημοσ. 1 Ιουλίου 2010 Επίσης κάτι που μπορείς να κάνεις είναι να έχεις μια private method σαν την παρακάτω: >string GetInput(const string& text) { string temporary; cout << text; getline(cin, temporary); return temporary; } Οπότε μετά θα μπορείς να την καλείς στην book::input() κάπως έτσι: >string ISBN = Input("Dose to ISBN :"); string title = Input("Dose ton Titlo :"); Υποθέτω πως οι ISBN και title είναι private member και έχουν τον τύπο string. Επίσης καλό είναι να αποφεύγεις την χρησιμοποίηση char πινάκων. Γι' αυτό υπάρχει άλλωστε και η string κλάση. Επίσης το καλό είναι ότι με την συνάρτηση που σου έγραψα παραπάνω μπορείς να έχεις μια κοινή συνάρτηση για την εισαγωγή κειμένου και να περιορίσεις πιθανά λάθη. Η συνάρτηση θα μπορούσε να χρησιμοποιηθεί ακόμη και για την πληκτρολόγηση της τιμής απλά μετά θα έπρεπε να κάνεις την μετατροπή string --> float. Αυτά ελπίζω να μην σε έπριξα
chrism4111 Δημοσ. 1 Ιουλίου 2010 Μέλος Δημοσ. 1 Ιουλίου 2010 Αυτά ελπίζω να μην σε έπριξα Αν μη τι αλλο γιατι να με πρηξεις ? Καθε απαντηση και επισημανση δεκτή. Αλλωστε αυτος δεν ειναι και ο σκοπος ενος φορουμ(Να βοηθαμε αν ξερουμε το αυτο)? Τωρα για τον παραπανω κωδικα ειναι λιγο πιο ψαγμένο ... Ειμαι στα αρχικα σταδια ακομη.Και δεν ξερω αν ασχοληθω και πολυ με την συγκεκριμένη γλωσσα. Αρα μου κανει και η αρχικη λυση . Θα ακολουθησω ομως αυτο που ειπες στο τελος να αποφευγω τους char πινακες πραγμα που λιγοστευει και τον κωδικα (strcpy() και strcpy()...)
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.