いつもお世話になっています。
以下のソースはファイルに今日の日付を書き込み、それをコマンドプロンプトに表示させたいと思い作成しましたが、できません。
どうか教えてください。
#include <time.h>
#include <stdio.h>
void put_data(void)
{
FILE *fp;
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
fp = fopen("time.txt", "w");
int year, month, day;
fprintf(fp, "%d%d%d%d\t",local->tm_year + 1900,
local->tm_mon + 1, local->tm_day);
printf("%d%d%d%d\n", year, month, day);
fclose(fp);
}
int main(void)
{
put_data();
return 0;
}
No.6ベストアンサー
- 回答日時:
★アドバイス
・次に日付の取得、書き込み、表示と分けてサンプルを載せておきます。
サンプル1…取得
サンプル2…書き込み
サンプル3…表示
サンプル1:
time_t t = time(NULL);
struct tm local = localtime(&t);
サンプル2:
FILE *fp;
if ( (fp = fopen("time.txt","w")) != NULL ){
int year = local->tm_year + 1900;
int month = local->tm_mon + 1;
int day = local->tm_mday
fprintf( fp, "%04d-%02d-%02d\n", year, month, day );
fclose( fp );
}
サンプル3:
int year = local->tm_year + 1900; ←サンプル2と同じ
int month = local->tm_mon + 1;
int day = local->tm_mday
printf( "%04d-%02d-%02d\n", year, month, day ); ←fprintf() とほぼ同じ
おまけ:
struct tm {
int tm_sec; /* 秒 [0-61] 最大2秒までのうるう秒を考慮 */
int tm_min; /* 分 [0-59] */
int tm_hour; /* 時 [0-23] */
int tm_mday; /* 日 [1-31] */
int tm_mon; /* 月 [0-11] 0から始まることに注意 */
int tm_year; /* 年 [1900からの経過年数] */
int tm_wday; /* 曜日 [0:日 1:月 ... 6:土] */
int tm_yday; /* 年内の通し日数 [0-365] 0から始まることに注意*/
int tm_isdst; /* 夏時間が無効であれば 0 */
};
まとめ:
・上記のサンプル1~サンプル3をまとめて1つにすると次のようになります。
#include <time.h>
#include <stdio.h>
int main( void )
{
time_t t = time(NULL);
struct tm local = localtime(&t);
FILE *fp;
if ( (fp = fopen("time.txt","w")) != NULL ){
int year = local->tm_year + 1900;
int month = local->tm_mon + 1;
int day = local->tm_mday
fprintf( fp, "%04d-%02d-%02d\n", year, month, day );
printf( "%04d-%02d-%02d\n", year, month, day );
fclose( fp );
}
return 0;
}
・参考文献として
http://www.bohyoh.com/CandCPP/C/Library/time.html→『time』
http://www.bohyoh.com/CandCPP/C/Library/localtim …→『localtime』
http://www9.plala.or.jp/sgwr-t/lib/localtime.html→『localtime』
を参考にして下さい。
・以上。
No.5
- 回答日時:
>printf("%d%d%d%d\n", year, month, day);
このprintfは、前の質問の意図からすると本当はファイルの中身を確認したいんじゃないでしょうか?
ファイルの中身を確認したい場合、fclose後に再度READオープンして読み込まないと意図通りにはなりません。
今回の場合、
>fprintf(fp, "%d%d%d%d\t",local->tm_year + 1900,
local->tm_mon + 1, local->tm_day);
でファイルを作成しているので、テキストファイルを作ろうとしているのは理解していると思いますが、テキストファイルなのでテキストエディタで読み込めばファイルがちゃんと出来ているのは確認できます。
ワザワザプログラムで読み込まなくても良いんですが、今の技術レベルだと読み込みプログラムを書くことも難しそうですから、挑戦してみたほうが良いでしょうね。
で、前回の構造体をファイルに書きたいには直接つながっていかないですが狙い通りなんでしょうか?
構造体をファイルに書き出すなら、バイナリファイルを扱わなくてはいけません。
テキストファイルとバイナリファイルの違いが分からないから、まずテキストファイルを学ぼうとする意図なら良いんですけど。
いつもありがとうございます。
先ほどみなさんからの回答をみて、自分が質問した内容がおかしいことに気づきました。
以後気をつけて質問します。
ありがとうございます。
No.4
- 回答日時:
> Cの場合、ブロックの途中で変数を定義できません。
C99はOKのようですよ(笑)
No.2
- 回答日時:
以下のように、asctime() とかの引数として渡したいだけなどの場合
time_t t;
time(&t);
printf("%s", asctime(localtime(&t)));
は別にして、localtime() や gmtime() などの内部の静的な領域へのポインタを返すものの戻り値を、ポインタのまま使いまわすより、自分用の領域にコピーして使ったほうが紛れがなくていいんじゃないでしょうか?^^
=====
#include <time.h>
#include <stdio.h>
void put_data(void)
{
FILE *fp;
time_t t;
struct tm local;
time(&t);
local = *localtime(&t);
if ((fp = fopen("time.txt", "w")) != NULL) {
int year = local.tm_year + 1900,
month = local.tm_mon + 1, day = local.tm_mday;
fprintf(fp, "%d%d%d\t", year, month, day);
printf("%d%d%d\n", year, month, day);
fclose(fp);
}
}
int main(void)
{
put_data();
return 0;
}
No.1
- 回答日時:
>fprintf(fp, "%d%d%d%d\t",local->tm_year + 1900,local->tm_mon + 1, local->tm_day);
>printf("%d%d%d%d\n", year, month, day);
まず%dがfprintfとprintfのそれぞれに一個ずつ多いです。
それと、year、month、dayは宣言しただけで、自分の望む値が入ってないまま表示しようとしてるから、ちゃんと代入してから使うか、printf("%d%d%d\n", local->tm_year+1900, local->tm_mon+1, local->tm_mday);みたいにする。
あと、tm_dayじゃなくtm_mdayの間違いでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
CRC32の計算方法
-
日本語ファイル名のFTPについて
-
c言語 ファイルから数字を読み...
-
VisualStudioでのファイルの入...
-
クリップボードから画像取得
-
セグメンテーションエラーです
-
[C言語]2つのファイルを用いた...
-
音声データを出力するCプログラ...
-
大量の入力ファイルを扱うとき...
-
構造体のメンバにファイルポイ...
-
テキストファイル内に対して, ...
-
C言語での引数の省略方法
-
Notepad++の関数リスト表示の変...
-
マイナスからプラスへ転じた時...
-
【C++】関数ポインタの使い方
-
DWORDの実際の型は何でしょうか
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
C言語でファイル読み書きを早く...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
C言語 連番データの読み込み
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
C言語の課題です
-
fread()エラー
-
VisualStudioでのファイルの入...
-
大量の入力ファイルを扱うとき...
-
C言語でセグメンテーションエ...
-
C言語におけるファイル読み込み...
-
C言語でクロマキー合成をする方法
-
c言語 ファイルから数字を読み...
-
C言語を用いて、csvファイル内...
-
ファイル読み込み EOF 判定
おすすめ情報