2018年03月20日
《その342》 問題演習 p.449演習12-3
新版明解C++中級編 p.449 演習12-3
次のプログラム lasttime.cpp は、以下のように動作する。
・初めての実行時には、「初めての実行」と画面表示
・二回目以後の実行時には、前回実行した日時を表示
プログラム lasttime.cpp における現在の日時の取得を、クラス Date を利用して行うように変更したプログラムを作成せよ。
クラス Date とプログラム lasttime.cpp は、以下の通り。
// クラス Date
class Date {
int y; // 年
int m; // 月
int d; // 日
int h; // 時
int min; // 分
int s; // 秒
public:
Date() {
time_t current = time(NULL);
struct tm* local = localtime(&current);
y = local->tm_year + 1900;
m = local->tm_mon + 1;
d = local->tm_mday;
h = local->tm_hour;
min = local->tm_min;
s = local->tm_sec;
}
// 文字列作成
std::string to_string() const {
std::ostringstream so;
so << y << "年" << m << "月"
<< d << "日"
<< h << "時" << min << "分"
<< s << "秒";
return so.str();
}
};
// プログラム lasttime.cpp
#pragma warning(disable:4996)
#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;
char fname[] = "lasttime.txt";
void get_data() {
ifstream fis(fname);
if (fis.fail())
// オープンに失敗した場合
cout << "初めての実行\n";
else {
// 前回日時の読込み・画面表示
int y, m, d, h, min, s;
fis >> y >> m >> d >> h
>> min >> s;
cout << "前回の実行は " << y << "年"
<< m << "月" << d << "日"
<< h << "時" << min << "分"
<< s << "秒\n";
}
}
// 今回の日時を書込む
void put_data() {
ofstream fos(fname);
if (fos.fail())
cout << "\aファイルをオープンでき"
"ません。\n";
else {
time_t current = time(NULL);
struct tm* local = localtime(&current);
fos << local->tm_year + 1900 << ' '
<< local->tm_mon + 1 << ' '
<< local->tm_mday << ' '
<< local->tm_hour << ' '
<< local->tm_min << ' '
<< local->tm_sec << '\n';
}
}
int main() {
get_data(); // 前回日時の読込み・画面表示
put_data(); // 今回の日時を書込む
}
// 解答
#pragma warning(disable:4996)
#include <ctime>
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
class Date {
int y; // 年
int m; // 月
int d; // 日
int h; // 時
int min; // 分
int s; // 秒
public:
Date() {
time_t current = time(NULL);
struct tm* local = localtime(&current);
y = local->tm_year + 1900;
m = local->tm_mon + 1;
d = local->tm_mday;
h = local->tm_hour;
min = local->tm_min;
s = local->tm_sec;
}
// 文字列作成
std::string to_string() const {
std::ostringstream so;
so << y << "年" << m << "月"
<< d << "日"
<< h << "時" << min << "分"
<< s << "秒";
return so.str();
}
};
char fname[] = "lasttime.txt";
void get_data() {
ifstream fis(fname);
if (fis.fail())
// オープンに失敗した場合
cout << "初めての実行\n";
else {
// 前回日時の読込み・画面表示
ifstream fis("text.txt");
string str;
fis >> str;
cout << "前回の実行は " << str << '\n';
fis.close();
}
}
// 今回の日時を書込む
void put_data() {
ofstream fos(fname);
if (fos.fail())
cout << "\aファイルをオープンでき"
"ません。\n";
else {
ofstream fos("text.txt");
Date now;
fos << now.to_string() << '\n';
}
}
int main() {
get_data(); // 前回日時の読込み・画面表示
put_data(); // 今回の日時を書込む
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7456400
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック