使用在同一行C ++中引入的数据

时间:2018-05-06 08:14:58

标签: c++ loops while-loop cin getline

我试图获取并比较不同的数据。 我必须带上产品的名称和价格 (橙汁,5) 但我的问题是,我不知道如何为超过1种产品做到这一点。 我使用getline来提供数据,但我不知道他们将介绍多少产品,并且如何停止循环。

(橙汁,5;牛奶,7;)

while (?????????) {

    getline(cin, product, ',');
    getline(cin, price, ';');
    products[num] = product;
    proces[num] = atoi(proce.c_str());

    num++;


}

3 个答案:

答案 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;
}