#include <string>
#include <vector>
#include <iostream>
#include <limits>


struct PersonInfoStruct  // Ich würde bei Typennamen nicht angeben, dass es ein struct ist. Wozu soll das gut sein?
{
  // Hier sollte man überlegen, ob die Attribute nicht lieber private sein sollten.
  std::string name;   // Vergiss char-Arrays, außer du hast einen sehr guten Grund
  std::string surname;
  float hours;
};

// Deine sub_new_person schreiben wir ein bisschen um und nennen sie anders:
std::istream& operator>>(std::istream& in, PersonInfoStruct& person)
{
    std::cout << "\nGeben Sie den Vornamen ein: ";  // Naja, eigentlich sollte eine Eingabefunktion nix ausgeben, aber ich will nicht alles umbauen
    getline(in, person.name);

    std::cout << "\nGeben Sie den Nachnamen ein: ";
    getline(in, person.surname);

    std::cout << "\nGeben Sie die Arbeitsstunden ein: ";
    in >> person.hours;

    in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    return in;
} 

// Ausgabe gibt's auch noch dazu:
std::ostream& operator<<(std::ostream& out, const PersonInfoStruct& person)
{
    return out << "Vorname: " << person.name
               << "\nNachname: " << person.surname
               << "\nArbeitsstunden: " << person.hours << '\n';
} 


int main()
{
  std::vector<PersonInfoStruct> personenliste;
  for (PersonInfoStruct person; std::cin >> person; personenliste.push_back(person));

  std::cout << "Folgende Personen sind bekannt:\n";
  for (unsigned i = 0; i < personenliste.size(); ++i)
    std::cout << personenliste[i] << '\n';
}