C ++为什么这样做

时间:2015-06-16 23:19:57

标签: c++ visual-studio visual-c++ switch-statement

我正在使用Microsoft Visual Studio 2013

我目前有这个开关声明:

switch (option)
{
        case 1:
            getline(cin, newname);
            cout << "What would you like your new username to be?\nName: ";
            getline(cin, newname);
            name = newname;
            cout << "\nYour username is now '" << name << "' with your balance being $" << balance << "\n";
            options();
            break;
        case 2:
            cout << "\nOpenning cheat menu\n";
            cheats();
            break;
        default:
            cout << "\nExitting to main title...\n";
            title();
            break;
}

你可以忽略案例2和默认情况,只是显示所以你知道这些案例是有效的。案例2和默认工作完全正常,但案例1表现得很奇怪。正如你在案例1中看到的,我有两个getline(cin,newname);您可能认为我应该只有一个,但出于某种原因,我需要两个才能使此代码正常运行。

如果我只有其中一个代码跳过用户应该给出的输入。如果我有两个它正常工作。

我问过这个人他们也不明白,因此:为什么这样做。

2 个答案:

答案 0 :(得分:8)

显然,您在cin输入缓冲区中有剩余输入,包括换行符。当您使用除getline之外的其他输入操作时会发生这种情况。他们通常不会消耗输入缓冲区中的所有内容。

可以使用getline而不是额外的ignore,但更好的是,在您之前进行输入的地方执行此操作。

答案 1 :(得分:0)

我认为类似的问题已发布here

您需要使用cin.ignore()或cin.sync()刷新换行符。

第一个电话似乎也放错了地方......