我是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:是的,递归,是结构,没有迭代,没有类。它必须使用递归和结构。
答案 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;
}
这将允许任何空格分隔name
,a
,b
和c
。如果您想更加小心空格(例如在名称中允许使用空格,您可以使用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。