You program doesn't "look correct", it has a number of errors, detailed in other answers.
Here is a program that correctly reads in the song list. Note that these are four alternative methods for reading the file. Choose the one that makes the most sense to you and delete the other three.
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
struct Song
{
std::string title;
std::string artist;
int size;
Song() : size() { }
Song(const Song& song) :
title(song.title), artist(song.artist), size(song.size) { }
Song(std::string title, std::string artist, int size) :
title(title), artist(artist), size(size) { }
};
std::istream&
operator>>(std::istream& is, Song& song) {
return is >> song.title >> song.artist >> song.size;
}
int main ()
{
std::vector< Song > songs;
std::ifstream fin;
fin.open("songlist.txt");
// You could read the songs this way:
std::copy(std::istream_iterator<Song>(fin),
std::istream_iterator<Song>(),
std::back_inserter(songs));
// Or, if you don't like std::copy, you can do this:
Song song;
while(fin >> song)
songs.push_back(song);
// Or, if you don't like operator>>(istream, Song), you can do this:
std::string artist;
std::string title;
int size;
while(fin >> artist >> title >> size)
songs.push_back(Song(artist, title, size));
// Or, if you don't like using the constructor:
while(fin >> artist >> title >> size) {
Song song;
song.artist = artist;
song.title = title;
song.size = size;
songs.push_back(song);
}
int num_songs = songs.size();
std::cout << "welcome to the show: " << num_songs << "
";
return 0;
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…