Как добавить строку в мой массив структуры типа, который содержит строки и целые числа в c ++? - PullRequest
1 голос
/ 14 марта 2019

Это мои структуры:

struct Artist
{
    string Name;
    string CountryOfOrigin;

};

struct Time
{
    int Minutes;
    int Seconds;
};

struct Song
{
    string Title;
    Artist ArtistDetails;
    Time LengthOfSong;
};

И моя функция:

void LoadSongDataFromFile(Song s[])
{
    string inputFile, title, name, country;
    int minutes, seconds;
    cout << "Please enter the input file name: ";
    cin >> inputFile;

ifstream input;
input.open(inputFile);

int count = 0;
while (input >> title)
{
    s[count].Title >> title;
    s[count].ArtistDetails.Name >> name;
    s[count].ArtistDetails.CountryOfOrigin >> country;
    s[count].LengthOfSong.Minutes >> minutes;
    s[count].LengthOfSong.Seconds >> seconds;

    count++;
}

}

Я получаю сообщение об ошибке в этих трех строках:

    s[count].Title >> title;
    s[count].ArtistDetails.Name >> name;
    s[count].ArtistDetails.CountryOfOrigin >> country;

Сказать, что нет оператора >> соответствует этим операндам.Типы операндов: std :: string >> std :: string

Также данные, которые я пытаюсь поместить в массив struct, поступают из текстового файла, который содержит эту информацию:

Perfect

Эд Ширан с Бейонсе

Англия

4

23

Имя текстового файла - songdata.txt, если это имеет значение.Любая помощь с благодарностью!

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Вы можете использовать оператор = для присвоения значений.

input >> minutes;
s[count].LengthOfSong.Minutes = minutes;

Или читать непосредственно в структуру:

input >> s[count].LengthOfSong.Minutes;

Чтение с >> читает одно слово из ввода, поэтому оно будет работать только с вашими числами. Чтобы прочитать полную строку (строки), используйте std :: getline .

0 голосов
/ 14 марта 2019

Оператор >> имеет два значения:

  • сдвиг битов вокруг
  • чтение ввода из потока в объект

Последнее значение используется здесь. Как видите, определение говорит «из потока» и «к объекту».

В вашем коде вы вызываете оператор >> для чтения "из строки" s[count].Title в другую строку title.

Существует множество вариантов предопределенного оператора >>. Все они имеют поток в качестве первого операнда. Поэтому, чтобы использовать их, используйте std::cin >> s[count].Title.

Как упоминалось в другом ответе, оператор >> прекращает копирование после первого слова. Поэтому лучше использовать std::getline(std::cin, s[count].Title).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...