我的问题的背景是:我正在制作一个基于文本的游戏,它具有非常基本的库存系统和可重复使用的输入系统。一切都很好,但库存系统有点困难。我试图创建它的方式是使用向量。测试/示例代码如下:
int main()
{
string item;
vector<string> inv;
cout<<"There is a shotgun and a crowbar. What do you want to take?"<<endl<<"\n>";
getline(cin, item);
cout<<"\nYou decide to take the " << item << endl << "\n";
for(int i = 0; i < inv.size(); i++){
cout << inv.at(i) << endl;
}
cin >> item;
}
我不明白问题所在。没有编译器错误。它确实确认了我输入的内容,但在循环期间没有任何反应,并且它会自动进入我的临时暂停(the "cin >> item;"
)我想要发生的是获得一行可以包含空格,将其存储在inv矢量中(将用作我的库存)并将其作为列表读取。在我看来,for循环应该像这样:
for(i=0; if i < inventory size (do statement below), then i+1 and restart)
cout << inventory.at(i)
我是一个越来越多的数字,它应该代表向量中的所有内容,然后我可以利用它来将向量字符串读入列表......
另外,我对C ++很新,这个动态数组的概念称为向量。我因为这个问题而犹豫要问这个问题,因为我无法在网上找到任何可以回答我问题的内容。我有一种感觉,答案就是盯着我......
答案 0 :(得分:0)
您的工具名称向量为空,因此循环不执行任何操作。
替换
vector<string> inv;
与例如
vector<string> inv = {"shotgun", "crowbar"};
这种初始化在C ++ 11及更高版本(目前是C ++ 14)中得到支持,但在C ++ 03中不受支持,你可以在那里做到这一点。
template< class Type, int n >
int n_items( Type (&)[n] ) { return n; }
// ...
static const char * const inv_data[] = {"shotgun", "crowbar"};
vector<string> inv( inv_data, inv_data + n_items( inv_data ) );
请注意,遗憾的是,C ++标准库从C ++ 14开始,并没有为string
提供大写或小写的简单函数。您需要创建这样才能支持大写输入。