从用户输入c ++创建数组

时间:2013-02-21 16:03:35

标签: c++

我想从用户输入创建一个数组。用户输入如下所示:

ID     Numbers
1 -3 2 -1 12 19 8
2  3 1 -3 2 19 5
3  7 4 1 7 9 3
4  9 12 4 6 -7 4

所以有一个ID,然后是6个数字。我最多可以有20个ID。起初我有类似

的东西
struct Prog 
{
    unsigned int ID;
    signed int num_1;
    signed int num_2;
    signed int num_3;
    signed int num_4;
    signed int num_5;
    signed int num_6;
};

我使用以下方法将数据文件作为输入读入终端的单独函数中:

for (;;)
{
cin >> Temp.ID >> Temp.num_1 >> Temp.num_2 >> Temp.num_3 >> Temp.num_4 >> Temp.num_5 >> Temp.num_6;
}

然而,问题是,当我试图找到这些ID / Arrays的最小/最大值时,它会变得非常混乱许多不同的数组和元素。

所以现在我想做的是这样的事情:

struct Prog 
{
    unsigned int ID;
    static const int num_elements = 6;
    signed int numbers[num_elements];

};

然后我可以通过执行1 for循环并使用1 if语句比较值来更容易地找到最小/最大值,而不是像我之前的示例中那样。

我的问题是,我不知道如何采用上面的新结构并在顶部读取数据文件,并将它们存储在程序中以对它们运行操作。任何帮助将不胜感激。

感谢。

编辑:不使用std中的向量或std。

中的min / max

2 个答案:

答案 0 :(得分:1)

这是你在找什么?


for (;;)
{
cin >> Temp.ID >> Temp.numbers[0] >> Temp.numbers[1] >> Temp.numbers[2] >> Temp.numbers[3] >> Temp.numbers[4] >> Temp.numbers[5];
}

或者


while(1)
{
  cin >> Temp.ID;

  for(int i = 0; i<Temp.num_elements; i++)
  {
    cin >> Temp.number[i];
  } 
}

不确定这是否能回答您的问题,但它至少会为您提供一些信息。

答案 1 :(得分:1)

首先,如果元素的数量可以改变,最简单 解决方案是使用std::vector

struct Prog
{
    int id;
    std::vector<int> num;
};

其次,读取对象的常用方法是使用>>。 但是,在这种情况下,你没有真正的分隔符,所以任何分隔符 operator>>不知道该停在哪里。下一个最好的 解决方案是有一个构造函数,它接受一个字符串,和 指望您的客户知道如何划分输入。 类似的东西:

Prog::Prog( std::string const& toParse )
{
    std::istringstream parser( toParse );
    parser >> id;
    if ( ! parser ) {
        throw std::runtime_error( "no id" );
    }
    int element;
    while ( parser >> element ) {
        num.push_back( element );
    }
    if ( ! parser.eof() ) {
        //  Format error, before running out of data
        throw std::runtime_error( "format error" );
    }
}

由于这是一个构造函数,因此是报告错误的唯一方法 是一个例外。 (它应该是explicit。)

最后,因为您可能想要创建多个,以及您的 实际输入是面向行的:

std::string line;
int lineNumber = 0;
while ( std::getline( input, line ) ) {
    ++ lineNumber;
    try {
        data.push_back( Prog( line ) );
    } catch ( std::runtime_error const& error ) {
        std::cerr << error.what() << " (line " << lineNumber << ")\n";
    }
}

因为你不知道在这里有多少人,data 应该是std::vector<Prog>。 (即使你确实知道多少 期待,我会使用`std :: vector'。)