描述:编写一个程序,创建一个结构,这些结构的数组,以及指向结构数组的每个元素的指针数组,然后使用指针数组从数据文件中读取信息,然后打印出各种信息,详情如下
结果将输出到屏幕
数据文件有10行,每行有一个名称和一个年龄。
您必须定义一个名为personInfo的结构,其中包含2个元素
一个。一个名为name
的字符串湾一个名为age的int
定义一个名为people的personInfos数组。
定义一个名为personPtr
将personPtr的元素设置为人物元素的地址
即。 personPtr的第一个元素将是人们第一个元素的地址
使用成员访问操作符箭头和指针数组,读入10个名称和年龄
使用指针数组显示指针数组的每个元素的名称,年龄,地址以及人物数组的每个元素的地址
当前代码:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
struct personInfos
{
string name;
int age;
} people[9];
int main()
{
personInfos *personPtr;
personPtr = new personInfos[9];
int i;
for( i=0; i<10; i++ )
personPtr[i] = &people[i];
ifstream input;
input.open("C:\\Users\\jacob\\Google Drive\\Lab9");
for( i=0; i<10; i++ )
{
input >> personPtr[i]->name;
input >> personPtr[i]->age;
}
input.close();
return 0;
}
答案 0 :(得分:1)
首先,虽然看起来很聪明,但在声明struct时不要声明变量。它不仅令人困惑,而且在这种情况下它会创建一个全局变量(这是非常错误的)。此外,虽然数组元素的索引是0到9,但是当声明数组时,必须声明元素的数量,在本例中为10。
第二个“personInfos * personPtr”不是一个指针数组,它是一个简单的指针。要创建指针数组,请使用“personInfos * personPtr [10]”。你好像混淆了一个指针可以用作数组的事实,但是问的是,你必须创建一个指针数组。
因此,通过这些更改,这应该工作(现在无法测试):
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
struct personInfos
{
string name;
int age;
};
int main()
{
personInfos people[10];
personInfos* personPtr[10];
int i;
for( i=0; i<10; i++ )
personPtr[i] = &people[i];
ifstream input;
input.open("C:\\Users\\jacob\\Google Drive\\Lab9");
for( i=0; i<10; i++ )
{
input >> personPtr[i]->name;
input >> personPtr[i]->age;
}
input.close();
return 0;
}