использовать данные, введенные в той же строке C ++ - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь получить и сравнить разные данные. Я должен привести название продукта и их цены (Апельсиновый сок, 5) но моя проблема в том, что я не знаю, как это сделать для более чем 1 продукта. Я использую getline для передачи данных, но я не знаю, сколько продуктов они представят, и не знаю, как остановить цикл.

(апельсиновый сок, 5; молоко, 7;)

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

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

    num++;


}

Ответы [ 3 ]

0 голосов
/ 06 мая 2018

Вы можете принимать бесконечные пользовательские вводы, если вы не знаете размер, и выходить по определенному слову. Вот пример кода. Обратите внимание, что сразу после getline(cin, product, ',') я разместил оператор 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
0 голосов
/ 06 мая 2018

Я бы просто посмотрел в буфер stdin, чтобы увидеть, была ли строка завершена (вводом = \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;
}
0 голосов
/ 06 мая 2018

1001 * попробовать *

bool check=false;
if(!getline(cin, price, ';'))check=true;
...
if(check)break;

и вам следует использовать std::vector вместо array здесь.

...