Как отсканировать для ввода пользователем строки и целые числа для помещения в двумерный массив в c - PullRequest
0 голосов
/ 11 февраля 2020

Я пишу программу на C для двумерных массивов, где я должен получить сгенерированный пользователем двумерный массив на основе количества сотрудников и продуктов в магазине. У меня возникли проблемы с выяснением, как получить пользовательский ввод, состоящий из имен и чисел, в массив.

  for (int r = 0; r < employees; r++)
{
   for (int c = 0;c < numProducts; c++)
    {
        arr[r][c] = getUserInput();
    }
}

1 Ответ

1 голос
/ 11 февраля 2020

Таким образом, вы можете использовать вектор пар, которые могут содержать string с и int с.

Этот пример программы позволяет вводить пары узел за узлом и сохраняет его в векторе пар (string и int):

Живой образец

#include <iostream>
#include <vector>

int main()
{    
    int num;
    std::string str;
    std::vector<std::pair<std::string, int>> nodes; //container

    std::cout << "Enter string and number" << std::endl;
    while(std::cin >> str)
    {
        if(str == "exit") //type exit to leave the input cycle
           break;
        std::cin >> num;
        nodes.push_back(std::make_pair(str, num));
    }

    for (const auto& p : nodes)  // print the products
    {
        std::cout << p.first << " " << p.second << std::endl;  
    }
}

Теперь вы можете включить его в то, что вам нужно сделать поскольку ваше описание проблемы не позволяет мне понять, как именно вы связываете сотрудников с продуктами и именами.

РЕДАКТИРОВАТЬ

Поэтому, основываясь на вашем комментарии, я добавил новое решение, поддерживающее std::pair, которое очень удобно использовать, и я уверен, что никто не будет жаловаться на это, поэтому вам нужен контейнер с парами (имя, вектор значений).

Я разделил ввод имен и значений, потому что у вас есть сотрудник с несколькими именами, с которым сложнее управлять вводом.

Количество сотрудников и продуктов отсутствует, вы можете указать столько цен, сколько вам нужно, столько значений продуктов, сколько вам нужно.

Живой образец

#include <iostream>
#include <vector>
#include <sstream>

int main() {
    double temp_num;
    std::string str, name;
    std::vector<std::pair<std::string, std::vector<double>>> nodes;  //container
    std::vector<double> values;
    while(true){
        std::cout << "Enter employee name ('exit' to leave): ";
        getline(std::cin, str);  //employee name
        if (str == "exit") {
            break;
        }
        name = str;
        std::cout << "Enter values: ";
        getline(std::cin, str);  //values
        std::stringstream ss(str);
        while(ss >> temp_num)
            values.push_back(temp_num);       
        nodes.push_back(std::make_pair(name, values));
    }
    std::cout << std::endl;
    for (const auto& p : nodes)  // print names and the products
    {
        std::cout <<"Name - " << p.first << ": ";
        for (const auto& vals : p.second) {
            std::cout <<"$"<< vals << " ";
        }
        std::cout << std::endl;
    }
}
...