c ++ с использованием указателей для чтения в данных структуры (программа воспроизведения песен) - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть проект, похожий на плейлист IPOD. У меня проблемы с чтением моих данных в массиве структуры без использования векторов. Мой БФ говорит, что мой профессор не прав, что заставляет нас не использовать векторы, но это правило. Ребята, у вас есть предложения? Мой код ниже .. мой профессор сказал, что я был близко, но он все еще не компилируется? Спасибо за любую помощь:)

Struct Songs{
string title;    
string artist;
int mem;         //size of file in MBs
}song[20];      //up to 20 possible songs

int main
{
  song * pointer = new song;
  int num = 0;

  ifstream fin;
  fin.open("input.txt")

  while (fin.good())
  {
    getline(fin, *pointer[num].title; 

    if (*pointer[num].title.empty())   //to skip blank lines
    continue;

    getline(fin, *pointer[num].artist;
    fin >> *pointer[num].mem.get();    //get to avoid whitespace/enter 

    num++;
  }

  for (int i = 0; i<num;i++)    // my test to see if it reads in properly
  { 
    cout << *pointer[num].title << endl;      
    cout << *pointer[num].artist << endl; 
    cout << *pointer[num].mem << endl;
  }
  fin.close();

  delete pointer [] ;

  return 0;
}

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Возможно, я пропустил некоторые, но я считаю, что я отметил все изменения, которые я сделал, чтобы исправить это.Много синтаксических ошибок, которые я поместил // Исправлено рядом с.Также в основном я изменил распределение на новые песни [20], поэтому вы выделяете достаточно места для 20 новых песен.

#include <iostream>
#include <fstream>
using namespace std;

struct Songs{  // Fixed - You had an uppercase S on 'struct'
    string title;    
    string artist;
    int mem;         //size of file in MBs
}; // fixed - Removed since we will be allocating in Main()   

int main() // fixed - you are missing () at the end of main
{

    Songs * pointer = new Songs[20]; //up to 20 possible songs  // Fixed - You allocate 20 new Songs here
    int num = 0;

    ifstream fin;
    fin.open("input.txt");

    while (fin.good())
    {
            // Fixed - all uses of pointer as an array don't need to be de-referenced with *, [num] will do it
        getline(fin, pointer[num].title); // Fixed - you were missing the functions closing )

        if (pointer[num].title.empty())   //to skip blank lines
            continue;

        getline(fin, pointer[num].artist);  // Fixed - you were missing the functions closing )
        fin >> pointer[num].mem;    //get to avoid whitespace/enter // Fixed - removed .get()

        num++;
    }

    for (int i = 0; i<num;i++)    // my test to see if it reads in properly
    { 
        cout << pointer[num].title << endl;      
        cout << pointer[num].artist << endl; 
        cout << pointer[num].mem << endl;
    }
    fin.close();

    delete [] pointer;

  return 0;
}
0 голосов
/ 29 февраля 2012

Может, он хочет, чтобы вы использовали очередь вместо? Как песни могут быть «поставлены в очередь» в списке воспроизведения, который может быть более подходящей структурой данных?

...