• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:一日(0時0分0秒)おきに表示される文字列を変える)

一日(0時0分0秒)おきに表示される文字列を変える方法

このQ&Aのポイント
  • 一日(0時0分0秒)おきに表示される文字列を変える方法について説明します。
  • time関数を使って一日(0時0分0秒)の判定を行い、表示する文字列を決定します。
  • localtime関数を使用せずに、現在の時間から一日の経過時間を計算し、表示する文字列を切り替えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

うるう秒はどうするんだろう.

nanaka2222
質問者

お礼

もしかして86400(24*60*60)で割るのではなくて87840(24*60*61)で割れば0時0分0秒の判定ができたりして

nanaka2222
質問者

補足

うるう秒みたいなものもあるらしいですね 一体何に使うか分からなかったのですが

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

> i=((timer-54000)/86400)%20; //-54000は誤差修正のつもり time_t は > arithmetic types capable of representing times としか定義されていません (ISO/IEC 9899:1999 7.23.1 Components of time / Paragraph 3)。 time_tを直接演算するのは,処理系を特定しないといけません。 # 処理系のバージョンアップでtime_tの型や表現が変わる可能性も当然あります。 「時刻」を扱いたいならばlocaltimeやgmtimeを 「時間間隔」を扱いたいならばdifftimeを,それぞれ使う必要があります。 > localtime関数を使って何日や1月1日から何日経過したかを調べて判定を変えるというのは無しです。 > その場合は一ヶ月や一年ごとに初期値に戻されるので。 初期値に戻されるのは,単に実装を間違ったからではないでしょうか。 まぁ,どこかの日を基準日としてmktimeしdifftimeすればよいので, localtime自体は使うことはないでしょうけれども。

nanaka2222
質問者

補足

こういう関数もあるのですね。 これを使って正常に動かせるのか試してみますね

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

>一日(0時0分0秒)おきに表示される文字列を変えたい プログラムの動かし方がよくわからないです。 このプログラムは、常駐するか何かして、ずっと動いているのでしょうか。 「一日(0時0分0秒)おきに」というのは、 毎日、夜中の0時0分0秒になったら、という意味でしょうか。 >i=((timer-54000)/86400)%20; //-54000は誤差修正のつもり 何の誤差のことでしょうか。 86400という、一日の秒数が書いてある、ということは、 54000とは、15時間のことでしょうか。 なぜ15時間なのでしょうか。 >void *main(void){ main関数の型は本当に正しいでしょうか。

nanaka2222
質問者

お礼

システム的にかけなくなってしまったのでこちらでかきこみます 2さんに教えられた関数は結局使いませんでした そして自分で制限したにもかかわらず結局使う事になりました 3さんのうるう年の意見をヒントに思い通りのができました ありがとうございました #include <stdio.h> #include <time.h> void main(void){ time_t timer; struct tm *t_st; int i; char *set[20]={"お帰り", "帰ってきたな", "どこ行ってたの?プンプン",              ---省略--- }; time(&timer); t_st = localtime(&timer); int sa=t_st->tm_year+1900; int gou=t_st->tm_yday; for(i=2012;i<sa;i++){ if (((i % 4 == 0) && (i % 100 != 0)) || i % 400 == 0){ gou+=366; } else{ gou+=365; } } printf("%s",[gou%20}); }

nanaka2222
質問者

補足

<<このプログラムは、常駐するか何かして、ずっと動いているのでしょうか。 いえ、実行したときにだけ表示を変えるだけでいいのです。 ずっと動かすようにするプログラムも書く予定ではいます。 <<「一日(0時0分0秒)おきに」というのは、 毎日、夜中の0時0分0秒になったら、という意味でしょうか。 そうです 何の誤差のことでしょうか i=((timer)/86400)%20; にすると 夜中の0時0分0秒で表示が切り替わらないのです。 そのため計算して0時0分0秒で切り替わるよう秒数の誤差を出したのですが、その54000秒が毎日少しづつ小さくなってくるのです。 そのため今のままでは使えないのですよ。 void *main(void){ すみません 余計なところを取り除いてこちらに書くときに取り除きミスがあったようです ただしくは void main(void){ でした すみません

すると、全ての回答が全文表示されます。

関連するQ&A