【问题标题】:How to scan for user input of both strings and ints to put into a 2D array in c如何扫描字符串和整数的用户输入以放入c中的二维数组
【发布时间】:2020-02-11 17:14:13
【问题描述】:

我正在用 C 语言编写一个关于 2D 数组的程序,我将根据商店中的员工和产品数量来获取用户生成的 2d 数组。我无法弄清楚如何将包含名称和数字的用户输入放入数组中。

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

【问题讨论】:

  • 你能更详细地描述一下吗? getUserInput 函数的返回值是多少。示例输入和输出也会有所帮助。
  • @Eraklon 用户输入的是员工姓名及其每个产品的销售额。如“Jim” $43 $500 $878 他每件产品的销售量 printf("请输入销售员人数:\n");员工 = getUserInput(); printf("请输入产品数量:\n"); numProducts = getUserInput();

标签: c arrays multidimensional-array


【解决方案1】:

因此,您可以使用可以包含 strings 和 ints 的对向量。

此示例程序允许您逐个节点输入对,并将其存储在对的向量中(stringint):

Live sample

#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,它使用起来非常简单,而且我相信没有人会抱怨它,所以您需要一个具有对(名称、值向量)的容器。

我将姓名和值的输入分开,因为您的员工有多个姓名,因此更难管理输入。

没有多少员工和产品,您可以根据需要添加尽可能多的产品价值。

Live sample

#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;
    }
}

【讨论】:

  • 感谢您的帮助。我还没有学习成对向量。关系是用户将输入每个员工,然后输入他们销售的每种产品的美元金额。因此,用户首先告诉员工数量和产品数量,即 3 个员工 2 个产品,然后我将获取具体信息并计算总销售额
  • @AspiringProgrammer19 我添加了一个可能的解决方案,这些数据结构比乍看之下更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 2013-01-10
相关资源
最近更新 更多