アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在の時刻を表示させるプログラムをC言語で作成したいのですが、
書籍などを参考に以下のコーディングを行いました。

#include <stdio.h>
#include <time.h>

int main(void) {

time_t timer;

/* 現在の時刻を取得する */
timer = time(&timer);

/* 現在の時刻を出力する */
printf("現在の時刻: ");
printf("%s", ctime(&timer));
printf("です。\n");

return 0;
}

質問内容は以下の通りです。
(1)「time_t timer;」とは、time_t型の変数timerを宣言し、
  この変数にはtime()関数で取得した現在時刻の値が入る?

(2)「timer = time(&timer);」に関して、time()関数で取得した値
  を変数timerが指すアドレスの場所に入れる? その場合、
  返り値を格納する変数timerに、time()関数の引数と同じtimerが
  指定されているのはなぜ?

(3)プログラムを実行すると以下の結果となる。(time.exeを実行)
  C:\>time
  現在の時刻: 12:52:07.61
  新しい時刻を入力してください:

  現在の時刻を表示した直後に「新しい時刻を入力して下さい」が
  表示される。これはtime()関数の仕様どおり?

以上です。初歩的な質問で申し訳ございませんが、ご回答よろしく
お願いいたします。

A 回答 (4件)

(1) time() のマニュアルを読んでね。



(2) わかりません。

(3) 組み込みコマンドの time が実行されています。
    • good
    • 0
この回答へのお礼

了解しました。ありがとうございます。

お礼日時:2008/04/29 14:01

(2)も、time関数の使い方を調べてみてください。


(3)は、ソースファイルをtime.c以外(例:mytime.c)の名前にして、
OSにもともと備わっているコマンドの名前と重複しないようにしてみてください。
    • good
    • 0
この回答へのお礼

了解しました。ありがとうございます。

お礼日時:2008/04/29 14:02

> 書籍などを参考



どの程度読んでおられるのか、わかりませんが、基本的なことが書いて
いないような書籍はあまりよろしくないと思われます。

(1), (2) についてはマニュアルと time.h の中身をご覧下さい。
(3) は Windows 付属の CMD.EXE 内部の TIME が実行されています。
ご自身がどのディレクトリでコンパイルなさったのかを把握されて
おられないのでしょうか?

このコードの実行結果はおそらくこのようになると思われます。

現在の時刻: Sun Apr 13 14:23:00 2008
です。

> C:\>time

この「C:\>」から Windows 環境であることはわかりますが、コンパイラや
OS などの環境についても明確にご提示されることをお薦めします。
    • good
    • 0
この回答へのお礼

失礼いたしました。情報が不足していましたね。
以後気をつけます。
とりあえず疑問点は解消しました。
ありがとうございます。

お礼日時:2008/04/29 14:04

★アドバイス


(1)...はい。その通りです。
(2)...単純に時刻を取得して利用する際に2つの方法を取れるということ。
 つまり
 if ( time(NULL) == time_save ){ … }
 としたり
 time( &now );
 if ( now == time_save ){ … }
 という2つの使い方ができるようにしたのかも。
・単純に時刻を取得したいなら戻り値を使い引数はいらない。
 変数に現在の時刻を保存してなおかつそのときに時刻を
 戻り値で得たい場合には戻り値を何かに使う。
 例えば
 time_t start;
 
 if ( time(&start) == time_save ){ … }
 こんな感じで使える。よって
 timer = time( &timer );
 という使い方はしない。
(3)...内部コマンドの『time』が実行されました。
 プログラム名を変更して実行するとexeのプログラムが実行されます。
 他にも『COPY』とか、『REN』という内部コマンドと同じ名前で
 自作したプログラム名を付けると先に実行されるのは内部コマンドになります。
 なお、拡張子を指定して『time.exe』とすると内部コマンドではなく
 自作のプログラムが実行されます。
 試して見て下さい。
>これはtime()関数の仕様どおり?
 ↑
 Windows OS(MS-DOS)などの OS 仕様であってC言語のtime()関数の仕様ではありません。
    • good
    • 0
この回答へのお礼

詳細なご説明ありがとうございました。
非常に勉強になりました。

お礼日時:2008/04/29 14:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!