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

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

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

  • 0
Apanepai

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

Ερώτηση

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

Καμια ιδέα για το τι πρόβλημα υπάρχει?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

3 απαντήσεις σε αυτή την ερώτηση

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...