成员函数不会执行其整个代码

时间:2016-06-13 11:41:51

标签: c++ class methods getline

我已经制作了一台计算机"。我的结构如下:

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();
    }
}

然后,如果按y,您将被发送到下一步,即PC :: pcOn函数,如下所示:

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

但是当我在构造函数中使用while循环来使y继续时,changeName();不会工作,但如果我删除它,changeName函数工作正常,它需要我的输入就好了。

changeName()的代码如下所示:

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

我已经尝试使用Visual Studio的调试器来查看我为什么不能正确调用它,但唉也没有希望。 奇怪的是,如果构造函数中的while循环不存在,该函数可以正常工作。

2 个答案:

答案 0 :(得分:0)

这是因为在getline(cin, _name)中,它始终输入&#34; / n&#34;输入时输入的字符。

要更正它,请输入getchar();

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

答案 1 :(得分:0)

在调用cin之前,您需要刷新changeName(),这可以使用

完成
int c;
while ((c = getchar()) != '\n' && c != EOF);