我试图获取并比较不同的数据。 我必须带上产品的名称和价格 (橙汁,5) 但我的问题是,我不知道如何为超过1种产品做到这一点。 我使用getline来提供数据,但我不知道他们将介绍多少产品,并且如何停止循环。
(橙汁,5;牛奶,7;)
while (?????????) {
getline(cin, product, ',');
getline(cin, price, ';');
products[num] = product;
proces[num] = atoi(proce.c_str());
num++;
}
答案 0 :(得分:1)
如果您不知道某个单词的大小和退出,则可以接受无限的用户输入。这是一个示例代码。请注意,在if
之后我发出了exit,
声明。如果用户在此时输入#include <iostream>
#include <string>
#include <vector>
std::string product;
std::string price;
std::vector<std::string> products;
std::vector<int> prices;
int main()
{
unsigned num = 0;
while (true)
{
getline(std::cin, product, ',');
if(product == "exit")
break;
getline(std::cin, price, ';');
products.push_back(product);
prices.push_back(atoi(price.c_str()));
num++;
}
for(unsigned i = 0; i < products.size(); i++)
{
std::cout << "Product: " << products.at(i) << "\n";
std::cout << "Price : " << prices.at(i) << "\n";
}
}
,程序将退出。
我也用过矢量。向量类似于数组,但它们的大小可以在运行时更改,因此您可以在其中存储无限(尽可能多的内存)数据。
最后一部分是显示输出。
这是解决问题的一种示例方法,您可以应用任何您喜欢的方法。
orange juice,5;milk,7;exit,
我用过的输入:
Product: orange juice
Price : 5
Product: milk
Price : 7
产生的结果:
{{1}}
答案 1 :(得分:0)
试
for v in arr:
cmd = 'youtube-dl -u ' + email + ' -p ' + password + ' -o "' + v['path'] + '" ' + v['url']
os.system(cmd)
你应该在这里使用bool check=false;
if(!getline(cin, price, ';'))check=true;
...
if(check)break;
代替std::vector
。
答案 2 :(得分:0)
我只是向前看stdin缓冲区以查看该行是否被定义(通过enter = \n
。)
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string product;
std::string price;
std::vector<std::pair<std::string, int>> product_price;
while (std::cin.peek() != '\n')
{
std::getline(std::cin, product, ',');
std::getline(std::cin, price, ';');
product_price.push_back(make_pair(product,std::stoi(price)));
}
for (auto& item : product_price)
{
std::cout
<< "Product: " << item.first << "\n"
<< "Price : " << item.second << "\n";
}
return 0;
}