構造体のデータ(実行時間)がうまく表示されない。
テキストファイルから構造体score_dataに"LACKNUM.DAT"という名前を付けてデータを入れたのですが、これを別のプログラムで使うとうまく表示されません。"LACKNUM.DAT"をバイナリデータで使いたいのです。
構造体のサイズが関係しているのでしょうか?正常に表示されるよう
ご教授いただけませんか。欠けている情報がありましたら、おしらせください。
構造体の"LACKNUM.DAT"は<time.h>のtmと同じサイズにしたいのですが。
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXCNT 100 typedef struct { // 構造体の宣言 int tm_year; int tm_mon; int tm_mday; int tm_hour; int tm_min; int tm_sec; double score; } score_data; int main() { int i, count=0; FILE *fp; score_data stars[MAXCNT]; // 構造体配列の宣言 if( (fp=fopen( "LACKNUM.DAT", "r" )) == NULL ) { printf( "ファイルがオープンできません\n" ); exit( 1 ); } for( i = 0; i < MAXCNT; i++ ) { if( fscanf( fp, "%d %d %d %d %d %d %lf\n" // 構造体配列への読み込み , &stars[i].tm_year,& stars[i].tm_mon, &stars[i].tm_mday, &stars[i].tm_hour, &stars[i].tm_min,&stars[i].tm_sec,&stars[i].score ) != 7 ) break; count++; } fclose( fp ); if( (fp=fopen( "LACKNUM.DAT", "r")) == NULL ) { printf( "ファイルがオープンできません\n" ); exit( 1 ); } printf("count%d\n",count); for(i = 0; i < count; i++ ){ printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n所要時間(score)は%.1f\n" // 構造体配列への読み込み , stars[i].tm_year,stars[i].tm_mon,stars[i].tm_mday, stars[i].tm_hour,stars[i].tm_min,stars[i].tm_sec,stars[i].score); } fclose(fp); return 0; } /* データファイル starsdata.txt を下記とすると 2017 9 16 8 52 18 10.6 2015 12 7 19 9 59 8.0 2016 1 4 1 9 11 7.5 2016 1 4 19 16 8 9.0 2016 1 4 19 2 44 7.5 2016 1 4 22 31 52 9.3 2016 1 4 23 33 50 10.2 2016 1 31 21 9 53 7.0 2016 2 2 8 49 9.4 2016 2 27 12 4E 13.0 2016 2 28 2 27 20 7.4 2016 5 2 16 43 6.3 2017 9 14 10 21 18 6.0 これをバイナリデータに変換したつもりの"LACKNUM.DAT"を使って実行しています。 32 30 31 37 20 20 39 20 31 36 20 20 38 20 20 31 38 20 31 30 2E 36 0D 0A 32 30 31 35 20 31 32 20 20 37 20 31 39 20 20 35 39 20 20 38 2E 30 0D 0A 32 30 31 36 20 20 31 20 20 34 20 20 31 20 20 39 20 31 31 20 37 2E 35 0D 0A 32 30 31 36 20 20 31 20 20 20 34 20 31 39 20 31 36 20 20 38 20 20 39 2E 30 0D 0A 32 30 31 36 20 20 31 20 20 34 20 31 39 20 20 32 20 34 34 20 20 37 2E 35 0D 0A 32 30 31 36 20 20 31 20 20 34 20 32 32 20 33 31 20 35 32 20 39 2E 33 0D 0A 32 30 31 36 20 20 31 20 20 34 20 32 33 20 33 33 20 35 30 20 31 30 2E 32 0D 0A 32 30 31 36 20 20 31 20 33 31 20 32 31 20 20 39 20 35 33 20 20 37 2E 30 0D 0A 32 30 31 36 20 20 32 20 20 32 20 20 38 20 34 39 20 20 39 20 20 39 2E 34 0D 0A 32 30 31 36 20 20 32 20 32 37 20 20 31 32 20 34 35 20 32 36 20 31 33 2E 30 0D 0A 32 30 31 36 20 20 32 20 32 38 20 20 32 20 32 37 20 32 30 20 20 37 2E 34 0D 0A 32 30 31 36 20 20 35 20 20 32 20 31 36 20 34 33 20 33 32 20 20 36 2E 33 0D 0A 32 30 31 37 20 20 39 20 31 34 20 31 30 20 32 31 20 31 38 20 20 36 2E 30 0D 0A 実行結果は C:\MinGW\users\chap09\kadai>gcc -I. -o test4 test4.c -Wall C:\MinGW\users\chap09\kadai>test4 count13 2017年 9月 16日 8時 52分 18秒 所要時間(score)は10.6 2015年 12月 7日 19時 9分 59秒 所要時間(score)は8.0 2016年 1月 4日 1時 9分 11秒 所要時間(score)は7.5 2016年 1月 4日 19時 16分 8秒 所要時間(score)は9.0 2016年 1月 4日 19時 2分 44秒 所要時間(score)は7.5 2016年 1月 4日 22時 31分 52秒 所要時間(score)は9.3 2016年 1月 4日 23時 33分 50秒 所要時間(score)は10.2 2016年 1月 31日 21時 9分 53秒 所要時間(score)は7.0 2016年 2月 2日 8時 49分 9秒 所要時間(score)は9.4 2016年 2月 27日 12時 45分 26秒 所要時間(score)は13.0 2016年 2月 28日 2時 27分 20秒 所要時間(score)は7.4 2016年 5月 2日 16時 43分 32秒 所要時間(score)は6.3 2017年 9月 14日 10時 21分 18秒 所要時間(score)は6.0 C:\MinGW\users\chap09\kadai> 別のプログラムの実行結果 C:\MinGW\users\chap09\kadai>gcc -I. -o kadai9-1-2 kadai9-1-2.c pdcurses.a C:\MinGW\users\chap09\kadai>kadai9-1-2 過去の履歴 -------------------------- 221656476年 824195122月 540161312日 941629494時 824195360分 925970482秒 得点(所要時間)は0.0秒 221590947年 540094753月 958411040日 874524960時 909193266分 168636462秒 得点(所要時間)は0.0秒
テキスト(読み込み)→バイナリ(書き出し)→バイナリ(読み込み)→表示と動作すると思いますが、LACKNUM.DAT(テキスト?)の読み込みと表示しかないように見えますが?
すみません明日仕事なのでまたやってみます。ありがとうございます。
「"LACKNUM.DAT"という名前を付けてデータを入れた」入れ方がわからないと、読み出しプログラムだけ見てもアドバイスは困難です。
すみません。一応"LACKNUM.DAT"のデータを追加しましたがこれでなんとかなりまか。
バイナリに変換できてません。もとのテキストファイルと全く同じ(ヘキサダンプしただけ)ですが・・。
同じじゃないですね。201xの次の空白文字が、元テキストファイルでは1文字ですがlackum.datでは1文字だったり2文字だったりまちまちに変わってます。
回答3件
あなたの回答
tips
プレビュー