Search code examples
c++classmethodsgetline

Member function will not execute its whole code


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.


Solution

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