Προς το περιεχόμενο

C++ space character


chrism4111

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας είμαι νέος στον προγραμματισμο της C++..

Απλα επειδη γραφω στην σχολη μ C++ το σαββατο μου δημιουργηθηκε μια απορια ...

Φτιαχνω μια class (που αφορα ενα βιβλιο) με Private μεταβλητες πχ [string or char με μηκος 30 στην πειπτωση char]ISBN,[αντιστοιχα με το ISBN]title,[float]price....

 

Και κατα ακολουθια public μεταβλητες τους constractor [default,και υπερφορτομενο] , seters ,geters και καποιες αλλες functions...

 

To προβλημα μ ειναι οτι οταν δινω τιμη ειτε σε string ειτε σε char απο το πληκτρολογιο την ωρα που τρεχω το προγραμμα το κενο δεν μου το περναει(λογικο γιατι οταν δινεις κενο σε παει στην επομενη μεταβλητη που εχεις δηλωσει οτι ο χρηστης θα πληκτρολογησει)..

 

Υπαρχει τροπος να αποφυγω αυτο και να μπορω να βαζω τον κενο χαρακτηρα κατα την πληκτρολογηση???

Δημοσ.

Φαντάζομαι θα υπάρχει και άλλη λύση αλλά δοκίμασε κάτι τέτοιο

>
 i = 0
 while(1) {
   ch=getche();
   if (ch=='\n') exit;
   String[i++] = ch;
 }    
 

 

προσοχή, το αποπάνω δεν είναι κώδικας σε C αλλά ψευδοκώδικας που τυχαίνει να μοιάζει με C.

Δημοσ.

Ευχαριστω για την ταχυτητα στις απαντησεις και για τις απαντησεις.....

>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;

Δεν το χρησιμοποιησα σωστα?

Δημοσ.
Σωστά το χρησιμοποιείς. Τί εννοείς «σου αλλάζει σειρά»; Δεν τυπώνεται το μήνυμα "Dose tin Timi :" ;

 

Μου διχνει το μυνημα και αμεσως χωρις να πληκτρολογισω τον τιτλο με παει στην επομενη εντολη δηλαδη στην πληκτρολογηση του price..

Δημοσ.
Μου διχνει το μυνημα και αμεσως χωρις να πληκτρολογισω τον τιτλο με παει στην επομενη εντολη δηλαδη στην πληκτρολογηση του 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()

Δημοσ.
>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 :-)

Δημοσ.

Αν πληκτρολογήσεις που; Αν το κάνεις για το isbn τότε όντως έχει πρόβλημα αλλά για το τίτλο δουλεύει μια χαρά. Κατά πάσα πιθανότητα το πρόβλημα βρίσκεται αλλού στο κώδικα.

Δημοσ.
Αν πληκτρολογήσεις που; Αν το κάνεις για το isbn τότε όντως έχει πρόβλημα αλλά για το τίτλο δουλεύει μια χαρά. Κατά πάσα πιθανότητα το πρόβλημα βρίσκεται αλλού στο κώδικα.

 

Sorry φιλος εκανα edit λιγο μετα το μυνημα σ.

και οντως κατι δεν πηγενε καλα με τον κωδικα μ..

Δημοσ.

Επίσης κάτι που μπορείς να κάνεις είναι να έχεις μια 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.

 

Αυτά ελπίζω να μην σε έπριξα :lol::-D

Δημοσ.
Αυτά ελπίζω να μην σε έπριξα :lol::-D

 

Αν μη τι αλλο γιατι να με πρηξεις ? Καθε απαντηση και επισημανση δεκτή. Αλλωστε αυτος δεν ειναι και ο σκοπος ενος φορουμ(Να βοηθαμε αν ξερουμε το αυτο)?

 

Τωρα για τον παραπανω κωδικα ειναι λιγο πιο ψαγμένο ... Ειμαι στα αρχικα σταδια ακομη.Και δεν ξερω αν ασχοληθω και πολυ με την συγκεκριμένη γλωσσα. Αρα μου κανει και η αρχικη λυση .

Θα ακολουθησω ομως αυτο που ειπες στο τελος να αποφευγω τους char πινακες πραγμα που λιγοστευει και τον κωδικα (strcpy() και strcpy()...)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...