0

I have made a "computer". My conctructor looks like this:

PC::PC()
{
    cout << "Would you like to turn the pc on? type y for yes." << endl;
    a = getchar();

    while (a != 'y')
    {
        cout << "If you dont turn it on, then nothing will happen. Loser." << endl;
        a = getchar();
    }
}

Then if you press y you will be sent to the next step which is the function PC::pcOn which looks like this:

void PC::pcOn()
{
    for (auto i = 0; i < 3; i++)
    {
        cout << "----------------------------------------" << endl;
    }
    cout << "--------- What is your name? -----------" << endl;
    changeName();
    for (auto i = 0; i < 3; i++)
    {
        cout << "----------------------------------------" << endl;
    }

    for (auto i = 0; i < 5; i++)
    {
        cout << "**" << endl;
        Sleep(100);
    }
    cout << "Welcome " << name << " to the future of computing." << endl << endl;
    cout << "This computer program can do a lot of things for you" << endl << "it is a good calculator, try to type \"calculater\"" << endl;
}

However when i have the while loop in the contructor to get the y to go on, the changeName(); wont work, but if i remove that, the changeName function works just fine, and it takes my input just fine.

The code for the changeName() looks like this:

void PC::changeName()
{
    string _name;
    getline(cin, _name);
    name = _name;
}

I have tried using the Visual Studio's debugger to see why i wont call it correctly, but alas to no hope. The weird thing is, that the function works fine if the while loop in the constructor is not there.

  • 1
    Possible duplicate: [Why does std::getline() skip input after a formatted extraction?](http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction) – NathanOliver Jun 13 '16 at 11:45

2 Answers2

0

It is because in getline(cin, _name), it always inputs the "/n" character as it is feeded when you type enter.

To correct it, put a getchar();

void PC::changeName()
{
    string _name;
    getchar();
    getline(cin, _name);
    name = _name;
}
Priyansh Goel
  • 2,619
  • 1
  • 11
  • 35
0

You need to flush cin before calling changeName(), this can be done using

int c;
while ((c = getchar()) != '\n' && c != EOF);
Zouch
  • 2,038
  • 1
  • 13
  • 29