C++ 为什么这行得通
C++ Why does this work
我使用的是微软 Visual studio 2013
我目前有这个 switch 语句:
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);您可能认为我应该只有一个,但出于某种原因我需要两个才能使此代码正常运行。
如果我只有其中之一,代码将跳过用户应提供的输入。如果我有两个,它可以正常工作。
我问过别人这个,他们也不明白,所以:为什么这样做。
显然您在 cin
的 输入缓冲区 中有剩余的输入,包括换行符。当您使用 getline
以外的其他输入操作时会发生这种情况。它们通常不会消耗输入缓冲区中的所有内容。
您 可以 使用 ignore
而不是额外的 getline
,但更好的是,在您之前输入的地方进行输入。
我认为已经发布了类似的问题 here。
您需要使用 cin.ignore() 或 cin.sync() 刷新换行符。
第一个电话似乎也放错地方了...
我使用的是微软 Visual studio 2013
我目前有这个 switch 语句:
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);您可能认为我应该只有一个,但出于某种原因我需要两个才能使此代码正常运行。
如果我只有其中之一,代码将跳过用户应提供的输入。如果我有两个,它可以正常工作。
我问过别人这个,他们也不明白,所以:为什么这样做。
显然您在 cin
的 输入缓冲区 中有剩余的输入,包括换行符。当您使用 getline
以外的其他输入操作时会发生这种情况。它们通常不会消耗输入缓冲区中的所有内容。
您 可以 使用 ignore
而不是额外的 getline
,但更好的是,在您之前输入的地方进行输入。
我认为已经发布了类似的问题 here。
您需要使用 cin.ignore() 或 cin.sync() 刷新换行符。
第一个电话似乎也放错地方了...