2013-05-17 4 views
-4

Описание: Напишите программу, которая создает структуру, массив этих структур и массив указателей, которые указывают на каждый элемент массива структур, затем считывает информацию из файла данных, используя массив указатель, а затем выводит различную информацию, как описано нижеPointer Array, отображающий структуру

  1. результаты будет выводиться на экран

  2. файл данных состоит из 10 строк, каждая с именем и возрастом.

  3. Вы должны определения структуры, которая называется personInfo, с 2-мя элементами

а. строка под названием

b. a int called age

  1. определить массив personInfos, называемый людьми.

  2. определить массив указателей на personInfos называемых personPtr

  3. Установите элементы personPtr по адресам элементов людей

    т.е. первый элемент personPtr будет адрес первого элемента людей

  4. с использованием доступа член оператора стрелка, и массив указателей, читайте в 10 имен и возрастов

  5. Дисплей, используя массив указателей, имя, возраст, адрес каждого элемента массива указателей, а также адрес каждого элемента массива человека

Текущий код:

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

И ваши вопросы есть? Все, что я вижу, это домашнее задание или что-то в этом роде. Какая у вас проблема в данный момент Джейкоб? – DominikAngerer

+2

Добро пожаловать в stackoverflow! Это выглядит как домашнее задание, а не вопрос ... у вас есть вопрос? – eidsonator

+0

Когда вы компилируете этот код, он компилируется без ошибок или предупреждений. – user2019047

ответ

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; 
} 
+0

Большое спасибо. Глупые ошибки с моей стороны. Это подтверждает мой вопрос. – thomann061