Apanepai Δημοσ. 23 Ιανουαρίου 2008 Δημοσ. 23 Ιανουαρίου 2008 Σκοπός του κώδικα είναι να δημιουργήσω κάτι σαν menu. Υπάρχει όμως ένα πρόβλημα του οποίου δεν μπορώ να καταλάβω τη φύση του. Παραθέτω τον κώδικα: >#include <cstdlib> #include <iostream> #include <string> using namespace std; class test{ public: void stage1(); void stage2(); }; void::test::stage1() { cout<<"Dwse ena arithmo."<<endl; int i; cin>>i; cout<<i<<endl; system("PAUSE"); system("CLS"); stage2(); } void test::stage2() { cout<<"Dwse ena string."<<endl; string x; getline(cin, x, '\n'); cout<<x<<endl; system("PAUSE"); system("CLS"); stage1(); } int main(int argc, char *argv[]) { test t; t.stage1(); return EXIT_SUCCESS; } Μετά το καθάρισμα της εικόνας για πρώτη φορά δηλαδή μετά την πλήρη εκτέλεση της stage1() μου εμφανίζει να δώσω ένα string αλλά δεν μου δίνει τη δυνατότητα να πληκτρολογήσω κάτι αλλά περνάει κατευθείαν στο μήνυμα Πιεστε ένα πληκτρο για να συνεχισετε. Καμια ιδέα για το τι πρόβλημα υπάρχει?
georgemarios Δημοσ. 24 Ιανουαρίου 2008 Δημοσ. 24 Ιανουαρίου 2008 αντι για >getline(cin, x, '\n'); δοκίμασε >cin >> x;
Apanepai Δημοσ. 24 Ιανουαρίου 2008 Μέλος Δημοσ. 24 Ιανουαρίου 2008 georgemarios σε ευχαριστώ όντως δουλεύει. Μια ακόμα ερώτηση εαν δεν είναι κόπως. Παρατήρησα ότι εαν στην main καλέσω πρώτα την stage2() την πρώτη φορά δέχεται είσοδο κανονικά ενώ μετα όταν ξανακαλείται από την stage1() δεν δέχεται. Γιατί αυτό? Το πρόβλημα υπάρχει στην getline ή έχω καταλάβει κάτι λάθος από θέμα σχεδίασης?
bokarinho Δημοσ. 24 Ιανουαρίου 2008 Δημοσ. 24 Ιανουαρίου 2008 > //--------------------------------------------------------------------------- #include <iostream> #include <cstdlib> #include <string> /* Use Namespace. */ using namespace std; class TestClass { public: TestClass(const int Var = 0, const string _str = "") : i(Var), str(_str) {} TestClass& operator=(const TestClass& t); TestClass(const TestClass& t); ~TestClass(); void Test1(); void Test2(); void Print() const; private: string str; int i; }; /* Assignment Operator. */ TestClass& TestClass::operator =(const TestClass& t) { if(&t != this) { str = t.str; i = t.i; } return *this; } /* Copy Constructor. */ TestClass::TestClass(const TestClass& t) { str = t.str; i = t.i; } /* Destructor. */ TestClass::~TestClass() { } /* Test1. */ void TestClass::Test1() { /* Dummy str to hold the '\n' */ string d_str; cout << "Enter a number:"; cin >> i; /* Catch '\n' after the cin. */ getline(cin,d_str); cout << endl; Test2(); } /* Test2. */ void TestClass::Test2() { cout << "Enter a string:"; getline(cin,str); cout << endl; Test1(); } /* Print. */ void TestClass::Print() const { cout << "I = " << i << endl; cout << "String = " << str << endl; } /* Main() */ int main(int argc, char* argv[]) { TestClass *T = new TestClass(); T->Test1(); /* Can use T->Test2(); */ T->Print(); delete T; cout << "Press Enter to continue...." << endl; cin.get(); return 0; } //--------------------------------------------------------------------------- Για ρίξε μια ματιά, δεν χρειάζεται να χρησιμοποιήσεις οπωςδήποτε το cin, μπορείς και με την getline αρκεί να αρπάξεις το '\n'. Επίσης ίσως θα πρέπει να ορίσεις και κάποια private members γιατί έτσι όπως τα έχεις κάνει οι μεταβλητές είναι γνωστές μόνο μέσα στο scope της συνάρτησης.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.