*.txtファイルからリンクリストにデータを読み込もうとしています。このファイルは、16種類のデータが行に配置され、各データ型の間にタブが配置されて設定されています。私はこれに関していくつかの問題を抱えています。コンパイラはエラーを出しませんが、プログラムを実行して読み取るファイル名を入力しても、何も起こりません。while(!din.eof())
行(以下の行27)をforループに置き換えてみましたがfor(int i=0; i<NUM_LINES; i++)
、これは役に立ったようですが、最初の3つの要素(すべての文字列型)の後にゼロの行が続き、この行はループ。問題が以下にあると私が信じる方法を含めました。誰かが私のコードを見て、問題がどこにあるのか教えてくれないかと思っていました。ありがとう。
#include <iostream>
#include <fstream>
using namespace std;
class Node
{
public:
// Constructors
Node();
Node(const string name, const string position, const string team, const int g, const int att, const float attg, const int cmp, const float pct, const int yds, const float ydsg, const int lng, const int td, const int inte, const int sck, const int sckyl, const float rating);
Node(const Node & node);
~Node();
// Methods
bool readData();
void setNext(Node* next);
void print() const;
private:
string Name;
string Position;
string Team;
int G;
int Att;
float AttG;
int Cmp;
float Pct;
int Yds;
float YdsG;
int Lng;
int TD;
int Int;
int Sck;
int SckYL;
float Rating;
Node *Next;
};
//----------------------------------------------
// Constructor method
//----------------------------------------------
Node::Node()
{
Name = "";
Position = "";
Team = "";
G = 0;
Att = 0;
AttG = 0.0;
Cmp = 0;
Pct = 0.0;
Yds = 0;
YdsG = 0.0;
Lng = 0;
TD = 0;
Int = 0;
Sck = 0;
SckYL = 0;
Rating = 0.0;
Next = NULL;
}
//----------------------------------------------
// Constructor method with parameters
//----------------------------------------------
Node::Node(const string name, const string position, const string team, const int g, const int att, const float attg, const int cmp, const float pct, const int yds, const float ydsg, const int lng, const int td, const int inte, const int sck, const int sckyl, const float rating)
{
Name = name;
Position = position;
Team = team;
G = g;
Att = att;
AttG = attg;
Cmp = cmp;
Pct = pct;
Yds = yds;
YdsG = ydsg;
Lng = lng;
TD = td;
Int = inte;
Sck = sck;
SckYL = sckyl;
Rating = rating;
Next = NULL;
}
//----------------------------------------------
// Copy constructor method
//----------------------------------------------
Node::Node(const Node & node)
{
Name = node.Name;
Position = node.Position;
Team = node.Team;
G = node.G;
Att = node.Att;
AttG = node.AttG;
Cmp = node.Cmp;
Pct = node.Pct;
Yds = node.Yds;
YdsG = node.YdsG;
Lng = node.Lng;
TD = node.TD;
Int = node.Int;
Sck = node.Sck;
SckYL = node.SckYL;
Rating = node.Rating;
Next = NULL;
}
//----------------------------------------------
// Destructor method
//----------------------------------------------
Node::~Node()
{
}
//----------------------------------------------
// Method: readData
// Purpose: Read data from file into linked list, and print contents of the list.
//----------------------------------------------
bool Node::readData()
{
// Declare local variables
string name, position, team;
name = position = team = "";
int g, att, cmp, yds, lng, td, inte, sck, sckyl;
g = att = cmp = yds = lng = td = inte = sck = sckyl = 0;
float attg, pct, ydsg, rating;
attg = pct = ydsg = rating = 0.0;
// Get file name
string filename = "";
cout << "Enter file name: ";
cin >> filename;
// Open input file
ifstream din;
din.open(filename.c_str());
if (din.fail())
{
cerr << "Could not open file: " << filename << endl;
return false;
}
// Read data
Node *head = NULL;
while (!din.eof())
{
din >> name >> position >> team >> g >> att >> attg >> cmp >> pct >> yds >> ydsg >> lng >> td >> inte >> sck >> sckyl >> rating;
Node *temp = new Node(name, position, team, g, att, attg, cmp, pct, yds, ydsg, lng, td, inte, sck, sckyl, rating);
temp->setNext(head);
head = temp;
}
din.close();
head->print();
return true;
}
//----------------------------------------------
// setNext method
//----------------------------------------------
void Node::setNext(Node* next)
{
Next = next;
}
//----------------------------------------------
// Print method
//----------------------------------------------
void Node::print() const
{
cout << Name << " " << Position << " " << Team << " " << G << " " << Att << " " << AttG << " "
<< Cmp << " " << Pct << " " << Yds << " " << YdsG << " " << Lng << " " << TD << " " << Int << " "
<< Sck << " " << SckYL << " " << Rating;
if (Next != NULL)
Next->print();
}
//----------------------------------------------
// Main program
//----------------------------------------------
int main()
{
Node list;
if (list.readData())
cout << "Success" << endl;
else
cout << "Fail" << endl;
return 0;
}