免責事項 これは宿題の質問です。私が書いているプログラムの完全な解決策を求めているのではなく、何が起こっているのかをよりよく理解するよう求めているだけです。前もって感謝します。
提供された関数は、次のようなファイルから読み取ります。
foo;bar
foo;bar
そして、次のようなファイルから読み取るように関数を変更したいと思います
foo;bar;foobar
foo;bar;foobar
提供される関数は次のようになります
void EntryList::loadfile(const char filefoo[])
{
ifstream in;
char foo[MAX_CHAR];
char bar[MAX_CHAR];
AddressEntry anEntry;
in.open (filefoo);
if(!in)
{
in.clear();
cerr << endl << "Fail to open " << filefoo << " for input!" << endl << endl;
exit(1);
}
in.get(foo, MAX_CHAR, ';');
while (!in.eof())
{
in.get(); //remove field seperator ';'
in.get(bar, MAX_CHAR, '\n');
in.ignore(100, '\n'); //remove record seperator '\n'
anEntry.setfoo(foo);
anEntry.setbar(bar);
addEntry(anEntry);
in.get(foo, MAX_CHAR, ';'); //start the next record
}
in.close();
}
私が変更した関数は次のようになります
void EntryList::loadfile(const char fileName[])
{
ifstream in;
char foo[MAX_CHAR];
char bar[MAX_CHAR];
char foobar[MAX_CHAR];
TaskList theEntry;
in.open(fileName);
if (!in) {
in.clear();
cerr << endl
<< "Failed to open "
<< fileName
<< " for input!" << endl << endl;
exit(1);
}
in.get(foo, MAX_CHAR, ';');
while (!in.eof())
{
in.get(); // rm ;
in.get(bar, MAX_CHAR, ';');
in.get(foobar, MAX_CHAR, '\n'); // rm '\n'
in.ignore(100, '\n');
theEntry.setfoo(foo);
theEntry.setbar(bar);
theEntry.setfoobar(foobar);
addEntry(theEntry);
in.get(foo, MAX_CHAR, ';');
}
in.close();
}
私はこのプログラムを少なくとも 4 回書き直しています。そして、私は(人間的に)私がこれにすべきだと思う方法でファイルを変更しました。私は過去にこのようにして問題を抱えていました。(まだプログラムの他の部分に取り組んでいるので、今はあまり具体的に言うことはできませんが、私の結果が予想外だったことは知っています)だから私の質問は、私がやろうとしていることに対して、私が修正した関数は正しいように見えますか?私は1つずれていますか?元の機能がどのように機能しているかを理解するのに苦労していると思います。(体系的に段階的に。)したがって、変更された関数についての私の混乱。
私はまた、あなたが見たいと思う他の関数、私のセッターとゲッターを提供することができます. また、ご質問やご意見がございましたら、よろしくお願いいたします。