需要帮助从文本文件输入信息到使用递归的结构?

时间:2011-04-28 06:11:48

标签: c++ recursion structure

我是C ++和编程的全新手,所以在我尝试解释自己的时候请耐心等待。

我需要从.txt文件中将信息输入到结构中。文本文件中的信息如下:

11 12 13

萨利

10 11 12

...

结构需要包含名称,a(在案例1,11中),b(在案例1中为12)和c(在案例1,13中)。我希望递归地执行此操作,以便它遍历每个名​​称和a,b和c。我真的不知道从哪里开始,我真的只是在寻找一些指导。

我在考虑将名称放入一个2D char数组,将a,b和c放入另一个3D char数组中?但我不确定如何做到这一点,或者有什么目的。

感谢您的帮助!

好的,所以这就是我所拥有的。它处于非常早期阶段,但它确实存在。

#include<iostream>
#include<fstream>
using namespace std;

const int max_names=100, a=100, b=100, c=100;
char names[max_names];
int num1[a];
int num2[b];
int num3[c];


int main()
{
    ifstream inFile;
    inFile.open("data.txt");
    while(!inFile.eof())
    {
        for(int i=0; i<max_names; i++)
        {
                inFile>>names[i]>>num1[i]>>num2[i]>>num3[i];
        }
    }
    return 0;
}

struct Person
{
    char names[max_names];
    int num1[a];
    int num2[b];
    int num3[c];
}

编辑:虽然我不想使用递归/结构,但我必须上课。此外,在进一步查看我应该做的事情时,我需要创建一个结构数组。这很难吗?我正在研究我认为现在的代码,但我可能会完全离开。

我需要使用结构标识符。喜欢“struct Person”

编辑2:是的,递归,是结构,没有迭代,没有类。它必须使用递归和结构。

2 个答案:

答案 0 :(得分:1)

我会考虑使用ifstream在基本循环中读取文件。我认为递归不是这项工作的正确工具。

#include <iostream>
#include <fstream>
using namespace std;

int main () {    
  ifstream ifs("test.txt");

  while (ifs.good()) {
    struct foo;
    ifs >> foo.name >> foo.a >> foo.b >> foo.c;
  }

  ifs.close();    
  return 0;
}

这将允许任何空格分隔nameabc。如果您想更加小心空格(例如在名称中允许使用空格,您可以使用peek()检查新行或切换到fscanf之类的内容。

答案 1 :(得分:0)

您似乎想要定义class Person

class Person {
  std::string name_;
  int numbers[3]; // Is this always 3 ? 
public:
  Person(std::istream& input)
  {
    std::getline(input, name_); // First line is name.
    input >> numbers[0] >> numbers[1] >> numbers[2];
    std::ignore(INT_MAX, '\n'); // Eat newline.
    // Can you 100% rely on the input being correct? 
    // If not, you'll need to throw an exception: if (input.fail()) throw ...
  }

  std::string const& name() const { return name_; }
  int a() const { return numbers[0]; }
  int b() const { return numbers[1]; }
  int c() const { return numbers[2]; }
};

使用此类,您可以从IOstream构造人员,直到您点击EOF。