我有一个包含以下形式的数据的文件:
ballcolor 10
bgcolor 5
[...]
我试图通过以下方式阅读:
void read (const char *filename)
{
ifstream prefsfile (filename);
if (prefsfile.is_open ())
{
char prefsline [BUFSIZE], prefname [BUFSIZE];
unsigned int value;
while (! prefsfile.eof ())
{
prefsfile.getline (prefsline, BUFSIZE);
istringstream iss (prefsline);
iss >> prefname >> value;
if (! (iss.fail () || prefsfile.fail ()))
{
if (! strcmpi (prefname, PREFSTR_PAD_COLOR) && value <= BACKGROUND_MAX)
{
color.pad = value << 4;
}
else if (! strcmpi (prefname, PREFSTR_BALL_COLOR) && value <= FOREGROUND_MAX)
{
color.ball = value;
}
else if (! strcmpi (prefname, PREFSTR_FOREGROUND_COLOR) && value <= FOREGROUND_MAX)
{
color.foreground = value;
}
else if (! strcmpi (prefname, PREFSTR_BACKGROUND_COLOR) && value <= BACKGROUND_MAX)
{
color.background = value << 4;
color.ball |= color.background;
}
}
}
prefsfile.close ();
}
}
如果我给它一个完全符合上面显示的格式的文件,它工作得很好。但是,如果文件不符合要求,或者每行的长度大于BUFSIZE(=30)
,则会进入无限循环。
我该如何解决问题?