我已经编程了一段时间(在Prolog,Scheme和C中的一点点),但我最近决定了解我的C ++知识。我解决了一个用来说明矢量的问题。它本质上是一个创建数据库的项目,该数据库创建一个向量来临时存储用户输入的各种游戏,并删除他们不想要的游戏。代码本身运行正常,不如方案或Prolog可以做到的那么漂亮,但它的工作原理。
然而,我不小心在程序的第一个提示符中键入了“Control P”,我得到了最奇怪的结果:它开始无限循环。我再次尝试了使用“Control Z”,我得到了相同的结果。我没有尝试任何其他关键组合,但我想可以找到其他一些组合。这不是一个非常令人担忧的问题,但我很想知道为什么会这样做。它是关于C ++的,还是仅仅是Visual Studio?无论如何,这是来源:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
cout << "Welcome to the Cpp Games Database!";
int x = 0;
string game = "";
vector <string> games;
vector <string>::const_iterator iter;
while (x != 4){
cout<< "\n\nPlease choose from the list bellow to decide what you want to do:\n";
cout<< "1. Add Games to the Database.\n"
<< "2. Remove Games from the Database.\n"
<< "3. List all the Games.\n"
<< "4. Exit.\n"
<< "\n(Type the number of your choice and hit return)\n";
cin >> x;
switch (x){
case 1:
game = "";
do{
cout << "\nPlease Input a Game (type esc to exit): ";
cin >> game;
games.push_back(game);
} while (game != "esc");
games.pop_back();
break;
case 2:
game = "";
do{
cout << "\nPlease input the game you would like to remove(or type esc to exit): ";
cin >> game;
iter = find(games.begin(), games.end(), game);
if(iter != games.end())
games.erase(iter);
else cout << "\nGame not found, try again please.\n";
} while (game != "esc");
break;
case 3:
cout << "\nYour Games are:\n";
for (iter = games.begin(); iter != games.end(); iter++)
{
cout << endl << *iter << endl;
}
break;
default: break;
}
}
return 0;
}
答案 0 :(得分:0)
由于您没有为cin
输入有效数据,因此它会卡在那里等待数据被重新处理或丢弃以进行新输入。您需要检查输入并仅接受有效数据。基本上cin
保留了原始数据,并不断尝试处理它。
始终验证您的输入,如果输入无效则将其丢弃。
以下是关于同一问题的另一个答案,以获得更多洞察力(使用源代码)。 https://stackoverflow.com/a/17430697/1858323