ページ 11

GetDateTimeの使い方

Posted: 2012年2月10日(金) 21:19
by 3817
DXライブラリを使ってカレンダーを作ろうとしているのですが、GetDateTimeの使い方がわかりません。どなたか分かりやすく教えてください。お願いします。

Re: GetDateTimeの使い方

Posted: 2012年2月10日(金) 21:32
by beatle
http://homepage2.nifty.com/natupaji/DxL ... .html#R7N3
にサンプルコードがあります.
そのサンプルコードを見ても分からないというなら,再度ご質問ください.

Re: GetDateTimeの使い方

Posted: 2012年2月10日(金) 22:31
by 3817
書き方は分かりました。しかしまだ分からないところがあって、
①DATEDATA Date とは何ですか?
②x年z月y日a時b分c秒と表示するにはどうすればいいですか?

Re: GetDateTimeの使い方

Posted: 2012年2月10日(金) 22:44
by beatle
DXライブラリ置き場 リファレンスページ さんが書きました: DXライブラリ独自の DATEDATA 構造体に現在時刻を 格納します。 DATEDATA 構造体は以下のようなメンバ変数で成り 立っています。

int Year ; // 年
int Mon ; // 月
int Day ; // 日
int Hour ; // 時間
int Min ; // 分
int Sec ; // 秒
ということで,DATEDATAというのは構造体の型名(恐らくtypedefしてあるのでしょう)であり,DATEDATA Date;はDATEDATA型の変数を定義しています.


DATEDATA構造体には年,月,日などに対応した変数がありますので,それを利用します.
DrawFormatStringでも使えばいいと思います.

Re: GetDateTimeの使い方

Posted: 2012年2月11日(土) 11:07
by 3817
int Color;
DATEDATA Date;

Color = GetColor( 255 , 255 , 255 ) ;
DrawFormatString( 0, 0, Color, "いまは%d年%d月%d日%d時%d分%d秒です。Yn",Year,Mon,Day,Hour,Min,Sec );
                                                     //(円の記号が出なかったのでかわりにYとしました。)
これでいいですか?

Re: GetDateTimeの使い方

Posted: 2012年2月11日(土) 11:40
by softya(ソフト屋)
試せばすぐ結論が分かると思いますが、如何でしたか?

Re: GetDateTimeの使い方

Posted: 2012年2月11日(土) 20:42
by beatle
3817 さんが書きました:円の記号が出なかったのでかわりにYとしました。
本来,エスケープシーケンスに用いるのはバックスラッシュでして,円マークはたまたま日本語環境でバックスラッシュが円マークに割り当てられているだけです.
ですから,この掲示板では\nと書けば良いです.

Re: GetDateTimeの使い方

Posted: 2012年2月11日(土) 21:55
by 3817

コード:

 
 #include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	DATEDATA Date ;
	int Color;

	ChangeWindowMode( TRUE ) ;

	if( DxLib_Init() == -1 )return -1;

	while(1){

		GetDateTime( &Date );
		Color=GetColor(255,255,255);

		DrawFormatString(0,0,Color,"いまは%d年%d月%d日%d時%d分%d秒です。\n",Year,Mon,Day,Hour,Min,Sec); 

		if(ProcessMessage()==-1) break;
		if(CheckHitKey(KEY_INPUT_ESCAPE)==1)break;

		}

	DxLib_End() ;
	return 0 ;
}


でコンパイルしようとすると「'Year' : 定義されていない識別子です。」(Mon,Day,Hour,Min,Secもすべて同じく)と出て、ビルドエラーが起こります。どうしたらよいですか?

Re: GetDateTimeの使い方

Posted: 2012年2月11日(土) 22:05
by softya(ソフト屋)
構造体の勉強はされましたか?
DATEDATA Date ;
からデータを取り出すためには専用の書き方があります。

Re: GetDateTimeの使い方

Posted: 2012年2月12日(日) 10:49
by 3817
一度学びましたが良く分からなかったのです。専用の書き方とはどんなものですか?

Re: GetDateTimeの使い方

Posted: 2012年2月12日(日) 11:04
by softya(ソフト屋)
最低限必要なのは、構造体変数名.メンバ変数名でしか情報を取り扱えないということを理解することです。
Date.メンバ変数名で内容を参照する必要があります。
「構造体 メンバ参照(直接参照)」
http://www.cc.kyoto-su.ac.jp/~yamada/pB ... tml#direct

DrawFormatString(0,0,Color,"いまは%d年%d月%d日%d時%d分%d秒です。\n",Year,Mon,Day,Hour,Min,Sec);
このYearとかの書き方で扱えるのは単純な変数だけで構造体の参照方法ではありません。
言うなれば荷物を山田さんから受け取って下さいと言われてるようなもので、何処の山田さん?って聞きたくなると思いますがその何処のの情報が抜け落ちているということです。

Re: GetDateTimeの使い方

Posted: 2012年2月12日(日) 16:21
by 3817
それでは、

コード:

 #include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
         LPSTR lpCmdLine, int nCmdShow )
{
    struct DATEDATA Date ;
    int Color;
 
    ChangeWindowMode( TRUE ) ;
 
    if( DxLib_Init() == -1 )return -1;
 
    while(1){
 
        GetDateTime( &Date );
        Color=GetColor(255,255,255);
 
        DrawFormatString(0,0,Color,"いまは%d年%d月%d日%d時%d分%d秒です。\n",Date.Year,Date.Mon,Date.Day,Date.Hour,Date.Min,Date.Sec); 
 
        if(ProcessMessage()==-1) break;
        if(CheckHitKey(KEY_INPUT_ESCAPE)==1)break;
 
        }
 
    DxLib_End() ;
    return 0 ;
}
とすればよいのですね

Re: GetDateTimeの使い方

Posted: 2012年2月12日(日) 16:23
by softya(ソフト屋)
上にも書きましたが試されてどうでしたか?

Re: GetDateTimeの使い方

Posted: 2012年2月12日(日) 22:37
by 3817
それでも前と同じようにビルドエラーがおこるのですが

Re: GetDateTimeの使い方

Posted: 2012年2月12日(日) 23:11
by Dixq (管理人)
まずはじめに出ているエラーメッセージを読んで下さい。
そうすればエラーの理由がわかります。
それを踏まえてNo.2で書かれたサンプルコードと見比べてみて下さい。
どこか違いますよね。
また、それを直したとしても、そのループは「消す」という処理が無いので、ドンドンわけのわからない表示になります。
基本コードについてはこちらをご覧ください。
http://dixq.net/g/01_09.html

Re: GetDateTimeの使い方

Posted: 2012年2月13日(月) 20:54
by 3817
「'Year' : 定義されていない識別子です。」(Mon,Day,Hour,Min,Secもすべて同じく)と出て、ビルドエラーが起こります。
自力で解決させる意図なのだとは思いますが、私も忙しいので簡潔に答えて頂かないと困ります。

Re: GetDateTimeの使い方

Posted: 2012年2月13日(月) 21:13
by softya(ソフト屋)
3817 さんが書きました:「'Year' : 定義されていない識別子です。」(Mon,Day,Hour,Min,Secもすべて同じく)と出て、ビルドエラーが起こります。
自力で解決させる意図なのだとは思いますが、私も忙しいので簡潔に答えて頂かないと困ります。
申し訳ないですが急いでいらっしゃることは今はじめてお伺いしました。
フォーラムルールにあります通りお急ぎの場合は期日を書いていただけると助かります。 → http://dixq.net/board/board.html
それと、基本的にはご本人に考えていただくのがここの掲示板の意図となりますのでご了解下さい。

お急ぎみたいですので答えとしては、
struct DATEDATA Date ;
が元のままでよかったのです。
ここの部分もエラーとして出ているはずです。

最後に構造体など知識が無い状態でC言語のプログラムを組むことは無理がありますので勉強されることをお勧めします。

【追記】
3817さんとしては、とりあえず答えが欲しいのかプログラムを作れるようになりたいのか、どちらなのでしょうか?
後者なら、多少時間がかかっても地道に取り組むことも必要で時には入門書と向かい合うことも重要です。
我々もその勉強のお手伝いとしたいと考えておりますので、ご理解下さい。