2018年03月20日
《その343》 問題演習 p.449演習12-4
新版明解C++中級編 p.449 演習12-4
本ブログ《342》演習12-3 のプログラムに、現在の"気分"を表す文字列を追加したプログラムを作成せよ。
すなわち、前回実行時の時刻と気分を表示した後に、『現在の気分は : 』と入力を促し、キーボードから入力された気分を表す文字列を読み込んでファイルに書き込む。
たとえば、"最高!"と入力があった場合、次回の実行時に、
『前回の実行は 2018/03/20_12:34:56。気分は「最高!」でした。』のように表示すること。
// 解答
#pragma warning(disable:4996)
#include <iomanip>
#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 << '/' << setfill('0')
<< setw(2) << m << '/'
<< setw(2) << d << '_'
<< setw(2) << h << ':'
<< setw(2) << min << ':'
<< setw(2) << s << '\n';
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, feeling;
fis >> str;
fis >> feeling;
cout << "前回の実行は " << str
<< "。気分は「"
<< feeling << "」でした。\n";
fis.close();
}
}
// 今回の日時と気分を書込む
void put_data() {
ofstream fos(fname);
if (fos.fail())
cout << "\aファイルをオープンでき"
"ません。\n";
else {
string feeling;
cout << "現在の気分は : ";
cin >> feeling;
ofstream fos("text.txt");
Date now;
fos << now.to_string() << '\n';
fos << feeling << '\n';
}
}
int main() {
get_data();
put_data();
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7457723
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック