【发布时间】:2018-05-26 23:25:38
【问题描述】:
我有一个程序,我需要一个选项来将有关事件的信息导入日历。当事件被导出时,每条信息都有自己的一行,所以我使用 >> 运算符(对于 int 类型)和 getline(对于字符串)的组合。 有一个更好的方法吗?如此多的仅用于输入读取的代码行似乎有点杂乱无章,也许这也不是解决此问题的最安全方法。有没有人建议任何改进?另外,之后关闭文件更好还是自动完成?
bool importFunction(const string &file, const Calendar &cal) {
ifstream reader;
reader.open(file);
string type, description, country, city, street;
int day, month, year, fHour, fMinute, fSecond, tHour, tMinute, tSecond,
number_street;
if(reader.is_open()){
getline(reader, type);
getline(reader, description);
reader >> day >> month >> year >> fHour >> fMinute >> fSecond >> tHour >>
tMinute >> tSecond;
reader.ignore();//ignore trailing newline
getline(reader, country);
getline(reader, city);
getline(reader, street);
reader >> number_street;
if(type=="long") {
LongEvent event(description, Date(day, month, year), Time(fHour, fMinute,
fSecond), Time(tHour, tMinute, tSecond), Location(country, city, street,
number_street));
cal.addEvent(event);
}
else if(type=="short") {
ShortEvent event(description, Date(day, month, year), Time(fHour, fMinute,
fSecond), Time(tHour, tMinute, tSecond), Location(country, city, street,
number_street));
cal.addEvent(event);
}
else cout << "FILE WAS NOT OPENED" << endl;
}
【问题讨论】:
-
一些小的改进可能是可能的,但如果你的数据格式那么复杂,你的阅读器功能也必须那么复杂。
-
您对安全有任何具体的担忧吗?否则,老实说,我真的看不到重大改进,也许其他人会。每个阅读操作似乎都有不同的目的,所以我认为你无能为力。代码大部分都很简洁——除了最后的对象构造。