そうですね・・・
年はちゃんと取得できてますが年度は
計算をしなくてはだめですよね。
月、日を含め、それらをどのようなソースで書けばいいのか
わからなかったのです・・・
まずは年度だけだが、こんなソースは思い浮かばなかったのかな?
これはかなり悪い書き方だけど、スタート地点としてはこんなもんだよ
もしこれが思い浮かばなかったのなら、もう少し基礎的な本でじっくりやった方が良いかも
この程度なら思いついていたというなら、自分で思いついたソースを提示して
コメントを求める等、掲示板での質問の仕方を考えた方が良いだろう
見て分かるとおり、コムギさんが書いた日本語をソースにしたにすぎない
つまりコムギさんが書いた日本語をそのままソースにすれば解答となっていたと
みなさんは考えているのです(しかも「日本語」->「ソース」の間で特別なテクニックが必要な
ところも無いように思えた)
月度(というのかな?)月次?の方はコムギさんがソースを書いてくれると
僕的には大変ありがたい
int now_year2;
if (now_month == 1) {
now_year2 = now_year - 1;
} else if (now_month == 2) {
now_year2 = now_year - 1;
} else if (now_month == 3) {
if (now_day == 1) {
now_year2 = now_year - 1;
} else if (now_day == 2) {
now_year2 = now_year - 1;
...省略
} else if (now_day == 17) {
now_year2 = now_year - 1;
} else if (now_day == 18) {
now_year2 = now_year;
...省略
} else if (now_day == 31) {
now_year2 = now_year;
} else {
エラー
}
} else if (now_month == 4) {
now_year2 = now_year;
} else if (now_month == 5) {
now_year2 = now_year;
} else if (now_month == 6) {
now_year2 = now_year;
} else if (now_month == 7) {
now_year2 = now_year;
} else if (now_month == 8) {
now_year2 = now_year;
} else if (now_month == 9) {
now_year2 = now_year;
} else if (now_month == 10) {
now_year2 = now_year;
} else if (now_month == 11) {
now_year2 = now_year;
} else if (now_month == 12) {
now_year2 = now_year;
} else {
エラー
}
kuさん ご丁寧にありがとうございます。
まだまだ勉強不足で申し訳ありません。
for文を使えばいいのですよね?
月と日にちを自分でやってみて
またわからなかったら
お願いします。
> for文を使えばいいのですよね?
境界で判断すればよいだけです。
レス送れてすみません。
まだまだ勉強不足のため、こんな感じにしか書けませんでした・・・
改善点などご指摘お願いします。
int now_year2, now_month2, now_day2=15;
//年度の取得
if(now_month == 1||2){
now_year2 = now_year - 1;
}else if(now_month == 3){
if(now_day ==
1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_year2 = now_year - 1;
}else if(now_day ==
18||19||20||21||22||23||24||25||26||27||28||29||30||31){
now_year2 = now_year;
}
}else if(now_month == 4||5||6||7||8||9||10||11||12){
now_year2 = now_year;
}
//月の取得
if(now_day == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_month2 = now_month - 1;
}else if(now_day == 18||19||20||21||22||23||24||25||26||27||28||29||30||31)
{
now_month2 = now_month;
}
int now_year2, now_month2, now_day2=15;
//年度の取得
if(now_month == 1||2){
now_year2 = now_year - 1;
}else if(now_month == 3){
if(now_day == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_year2 = now_year - 1;
}else if(now_day == 18||19||20||21||22||23||24||25||26||27||28||29||30||31){
now_year2 = now_year;
}
}else if(now_month == 4||5||6||7||8||9||10||11||12){
now_year2 = now_year;
}
//月の取得
if(now_day == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_month2 = now_month - 1;
}else if(now_day == 18||19||20||21||22||23||24||25||26||27||28||29||30||31){
now_month2 = now_month;
}
上のだと見にくいと思いますので
少し見やすいものをもう一度書かせていただきました。
日付が1~17間と18~31間では同じ処理ですよね。
その事に着目すれば、もっとシンプルになると思います。
日付は数字なのですから、大小の比較が簡単に出来るという事ですね。
月も同じ事が言えます。
このまんまで正常に処理できました?
長くなるので省略している?(そうとも思えないけど)
そもそも
if(now_month == 1||2){
って、必ず真になりますよね?
もし下記のコードが書けなかったのなら、
基礎的な本をもう少し時間をかけて学習した方が良いと思うよ
if (now_month == 1 || now_month == 2) {
あと
now_month2 = now_month - 1;
はnow_monthが1(月)だとnow_month2は0になっちゃうよね?
これも何らかの判定をして処理しないといけない
たぶんそのときはnow_month2を12にしないとね
>日付が1~17間と18~31間では同じ処理ですよね。
>その事に着目すれば、もっとシンプルになると思います。
>日付は数字なのですから、大小の比較が簡単に出来るという事ですね。
>月も同じ事が言えます
int now_year2, now_month2, now_day2=15;
//年度の取得
if(now_month == 1||now_month == 2){
now_year2 = now_year - 1;
}else if(now_month == 3){
if(now_day <= 17){
now_year2 = now_year - 1;
}else if(now_day >= 18){
now_year2 = now_year;
}
}else if(now_month >= 4){
now_year2 = now_year;
}
//月の取得
if(now_day <= 17){
now_month2 = now_month - 1;
}else if(now_day >= 18){
now_month2 = now_month;
}
こんなかんじですか?
>now_month2 = now_month - 1;
>はnow_monthが1(月)だとnow_month2は0になっちゃうよね?
>これも何らかの判定をして処理しないといけない
>たぶんそのときはnow_month2を12にしないとね
何らかの判定・・・?
詳しく教えていただけますか?
申し訳ありません。
now_monthが正しければ、
now_month2 = now_month;
の方ではnow_month2が0になることはない
now_month2が0になる可能性があるのはnow_month - 1したときだよね
その場合に
now_month2が0になったらnow_month2を12にするようにコードを書けば良いよ
もちろんnow_monthが1の場合とそれ以外で処理してもOKです(こっちが普通かな)
なんとか解決したと思います。
長い間本当にありがとうございました。
またわからないことがありましたら
よろしくお願いします。
一応、確認していただけますか?
>now_month2が0になったらnow_month2を12にするようにコードを書けば良いよ
//月の取得
if(now_day <= 17){
now_month2 = now_month - 1;
if(now_month == 1){
now_month2 = 12;
}
}else if(now_day >= 18){
now_month2 = now_month;
}
コムギさんの書き方なら、こっちの方が最初に思いつきそうな感じです
if (now_day <= 17) {
now_month2 = now_month - 1;
if (now_month2 == 0) {
now_month = 12;
}
now_month1を比較する場合は下記のような感じかな
if (now_day <= 17) {
if (now_month == 1) {
now_month2 = 12;
} else {
now_month2 = now_month - 1;
}
こんな感じを想定しました。now_month2に12を設定する場合ですが
now_month - 1を代入する回数が1回少なくて済みます
ただし結果は同じですので、コムギさんの方法でOKです
now_month2は他に良いのが思い浮かびませんが
now_year2についてはこんなやりかたも考えられます
時間ができたときにでも、考えてみてください
int nMonthDay = now_month * 100 + now_day;
if (nNonthDay <= 317) {
now_year2 = now_year - 1;
} else {
now_year2 = now_year;
}
kuさん、本当に感謝してます。
長い間ありがとうございます。
もっと勉強していきたいと思います。
またわからないところがあったら
よろしくお願いします。
最初からCTime::GetMonth()の値をnow_month2に代入しておけば
> }else if(now_day >= 18){
> now_month2 = now_month;
は要らなくなると思います。
> if(now_day <= 17){
> now_month2 = now_month - 1;
> if(now_month == 1){
> now_month2 = 12;
> }
> }
今が1月だった場合now_month2に値が2回代入されることになりますので個人的には
if ( now_day <= 17 )
{
if ( now_month == 1 )
{
now_month2 = 12;
}
else
{
now_month2 = now_month - 1;
}
}
が好みです。
解決したらチェックを入れましょう。