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

C++ αλληλοκαλεσματα σε συναρτησεις ιδιας ταξης


Apanepai

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

Σκοπός του κώδικα είναι να δημιουργήσω κάτι σαν 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 σε ευχαριστώ όντως δουλεύει.

Μια ακόμα ερώτηση εαν δεν είναι κόπως.

Παρατήρησα ότι εαν στην main καλέσω πρώτα την stage2() την πρώτη φορά δέχεται είσοδο κανονικά ενώ μετα όταν ξανακαλείται από την stage1() δεν δέχεται. Γιατί αυτό? Το πρόβλημα υπάρχει στην getline ή έχω καταλάβει κάτι λάθος από θέμα σχεδίασης?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

>
//---------------------------------------------------------------------------

#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 της συνάρτησης.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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