我已经制作了一台计算机"。我的结构如下:
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循环不存在,该函数可以正常工作。
答案 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);