teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

"LACKNUM\.DAT"の追加

2017/09/18 21:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -71,7 +71,27 @@
71
71
  2016 5 2 16 43 6.3
72
72
  2017 9 14 10 21 18 6.0
73
73
  これをバイナリデータに変換したつもりの"LACKNUM.DAT"を使って実行しています。
74
-
74
+ 32 30 31 37 20 20 39 20 31 36 20 20 38 20 20 31
75
+ 38 20 31 30 2E 36 0D 0A 32 30 31 35 20 31 32 20
76
+ 20 37 20 31 39 20 20 35 39 20 20 38 2E 30 0D 0A
77
+ 32 30 31 36 20 20 31 20 20 34 20 20 31 20 20 39
78
+ 20 31 31 20 37 2E 35 0D 0A 32 30 31 36 20 20 31
79
+ 20 20 20 34 20 31 39 20 31 36 20 20 38 20 20 39
80
+ 2E 30 0D 0A 32 30 31 36 20 20 31 20 20 34 20 31
81
+ 39 20 20 32 20 34 34 20 20 37 2E 35 0D 0A 32 30
82
+ 31 36 20 20 31 20 20 34 20 32 32 20 33 31 20 35
83
+ 32 20 39 2E 33 0D 0A 32 30 31 36 20 20 31 20 20
84
+ 34 20 32 33 20 33 33 20 35 30 20 31 30 2E 32 0D
85
+ 0A 32 30 31 36 20 20 31 20 33 31 20 32 31 20 20
86
+ 39 20 35 33 20 20 37 2E 30 0D 0A 32 30 31 36 20
87
+ 20 32 20 20 32 20 20 38 20 34 39 20 20 39 20 20
88
+ 39 2E 34 0D 0A 32 30 31 36 20 20 32 20 32 37 20
89
+ 20 31 32 20 34 35 20 32 36 20 31 33 2E 30 0D 0A
90
+ 32 30 31 36 20 20 32 20 32 38 20 20 32 20 32 37
91
+ 20 32 30 20 20 37 2E 34 0D 0A 32 30 31 36 20 20
92
+ 35 20 20 32 20 31 36 20 34 33 20 33 32 20 20 36
93
+ 2E 33 0D 0A 32 30 31 37 20 20 39 20 31 34 20 31
94
+ 30 20 32 31 20 31 38 20 20 36 2E 30 0D 0A
75
95
  実行結果は
76
96
  C:\MinGW\users\chap09\kadai>gcc -I. -o test4 test4.c -Wall
77
97
 

5

手直し

2017/09/18 21:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,10 +4,6 @@
4
4
  ご教授いただけませんか。欠けている情報がありましたら、おしらせください。
5
5
  構造体の"LACKNUM.DAT"は<time.h>のtmと同じサイズにしたいのですが。
6
6
  ```c言語
7
- /* 構造体の配列を宣言して、ファイルからデータを読み込むサンプルプログラムです。
8
- 今回は入力までです。配列を関数へ渡して利用する例は次回に。
9
- 【 構造体配列にファイルからデータ入力するプログラム例 】
10
- */
11
7
  #include <stdio.h>
12
8
  #include <stdlib.h>
13
9
  #include <time.h>
@@ -74,7 +70,7 @@
74
70
  2016 2 28 2 27 20 7.4
75
71
  2016 5 2 16 43 6.3
76
72
  2017 9 14 10 21 18 6.0
77
- これをバイナリデータに変換したつもりの"LACKNUM.DAT"を使ってじっこうしています。
73
+ これをバイナリデータに変換したつもりの"LACKNUM.DAT"を使って実行しています。
78
74
 
79
75
  実行結果は
80
76
  C:\MinGW\users\chap09\kadai>gcc -I. -o test4 test4.c -Wall

4

手直し

2017/09/17 06:54

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -109,6 +109,17 @@
109
109
  所要時間(score)は6.0
110
110
 
111
111
  C:\MinGW\users\chap09\kadai>
112
+ 別のプログラムの実行結果
113
+ C:\MinGW\users\chap09\kadai>gcc -I. -o kadai9-1-2 kadai9-1-2.c pdcurses.a
112
114
 
115
+ C:\MinGW\users\chap09\kadai>kadai9-1-2
113
116
 
117
+ 過去の履歴
118
+ --------------------------
119
+ 221656476年 824195122月 540161312日 941629494時 824195360分 925970482秒
120
+ 得点(所要時間)は0.0秒
121
+
122
+ 221590947年 540094753月 958411040日 874524960時 909193266分 168636462秒
123
+ 得点(所要時間)は0.0秒
124
+
114
125
  ```

3

無駄なコードの削除

2017/09/17 06:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -43,36 +43,17 @@
43
43
  count++;
44
44
  }
45
45
  fclose( fp );
46
-
47
- // 本来なら、入力したデータを関数などに渡して使います
48
- // たとえば一番背の高い人を調べる関数
49
- // int whoIsTallest( shape_t stars[], int num ) など
50
- // 関数との受け渡しは次回のTipsで ...
51
46
 
52
47
  if( (fp=fopen( "LACKNUM.DAT", "r")) == NULL ) {
53
48
  printf( "ファイルがオープンできません\n" );
54
49
  exit( 1 );
55
50
  }
56
-
57
- /* for(i = 0; i < MAXCNT; i++ ){
58
- if((fread(&stars, sizeof(stars), 1, fp)!=0)){
59
- printf("%d年 %d月 %d日 %d時 %d分 %d秒\n",
60
- stars->tm_year + 1900, stars->tm_mon + 1,
61
- stars->tm_mday, stars->tm_hour, stars->tm_min, stars->tm_sec);
62
- fread(&score, sizeof(double), 1, fp);
63
- printf("得点(所要時間)は%.1f秒\n\n", score);
64
- }
65
- }
66
- */
67
51
  printf("count%d\n",count);
68
52
  for(i = 0; i < count; i++ ){
69
53
  printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n所要時間(score)は%.1f\n" // 構造体配列への読み込み
70
54
  , stars[i].tm_year,stars[i].tm_mon,stars[i].tm_mday,
71
- stars[i].tm_hour,stars[i].tm_min,stars[i].tm_sec,stars[i].score);
55
+ stars[i].tm_hour,stars[i].tm_min,stars[i].tm_sec,stars[i].score);
72
-
73
- }
56
+ }
74
-
75
-
76
57
  fclose(fp);
77
58
  return 0;
78
59
  }

2

説明の追加

2017/09/17 06:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -80,13 +80,21 @@
80
80
 
81
81
  /*
82
82
  データファイル starsdata.txt を下記とすると
83
+ 2017 9 16 8 52 18 10.6
84
+ 2015 12 7 19 9 59 8.0
85
+ 2016 1 4 1 9 11 7.5
86
+ 2016 1 4 19 16 8 9.0
87
+ 2016 1 4 19 2 44 7.5
88
+ 2016 1 4 22 31 52 9.3
89
+ 2016 1 4 23 33 50 10.2
90
+ 2016 1 31 21 9 53 7.0
91
+ 2016 2 2 8 49 9.4
92
+ 2016 2 27 12 4E 13.0
93
+ 2016 2 28 2 27 20 7.4
94
+ 2016 5 2 16 43 6.3
95
+ 2017 9 14 10 21 18 6.0
96
+ これをバイナリデータに変換したつもりの"LACKNUM.DAT"を使ってじっこうしています。
83
97
 
84
- Brad_Pitt 183.2 73.4
85
- Tom_Cruise 170.1 67.2
86
- Johnny_Depp 178.2 70.5
87
- Will_Smith 188.0 78.3
88
- Bruce_Willis 184.0 78.3
89
-
90
98
  実行結果は
91
99
  C:\MinGW\users\chap09\kadai>gcc -I. -o test4 test4.c -Wall
92
100
 

1

説明文の追加

2017/09/17 06:43

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,6 +4,16 @@
4
4
  ご教授いただけませんか。欠けている情報がありましたら、おしらせください。
5
5
  構造体の"LACKNUM.DAT"は<time.h>のtmと同じサイズにしたいのですが。
6
6
  ```c言語
7
+ /* 構造体の配列を宣言して、ファイルからデータを読み込むサンプルプログラムです。
8
+ 今回は入力までです。配列を関数へ渡して利用する例は次回に。
9
+ 【 構造体配列にファイルからデータ入力するプログラム例 】
10
+ */
11
+ #include <stdio.h>
12
+ #include <stdlib.h>
13
+ #include <time.h>
14
+
15
+ #define MAXCNT 100
16
+
7
17
  typedef struct { // 構造体の宣言
8
18
  int tm_year;
9
19
  int tm_mon;
@@ -15,6 +25,101 @@
15
25
  } score_data;
16
26
 
17
27
 
28
+ int main()
29
+ {
30
+ int i, count=0;
31
+ FILE *fp;
32
+
33
+ score_data stars[MAXCNT]; // 構造体配列の宣言
18
34
 
35
+ if( (fp=fopen( "LACKNUM.DAT", "r" )) == NULL ) {
36
+ printf( "ファイルがオープンできません\n" );
37
+ exit( 1 );
38
+ }
39
+ for( i = 0; i < MAXCNT; i++ ) {
40
+
41
+ if( fscanf( fp, "%d %d %d %d %d %d %lf\n" // 構造体配列への読み込み
42
+ , &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;
43
+ count++;
44
+ }
45
+ fclose( fp );
19
46
 
47
+ // 本来なら、入力したデータを関数などに渡して使います
48
+ // たとえば一番背の高い人を調べる関数
49
+ // int whoIsTallest( shape_t stars[], int num ) など
50
+ // 関数との受け渡しは次回のTipsで ...
51
+
52
+ if( (fp=fopen( "LACKNUM.DAT", "r")) == NULL ) {
53
+ printf( "ファイルがオープンできません\n" );
54
+ exit( 1 );
55
+ }
56
+
57
+ /* for(i = 0; i < MAXCNT; i++ ){
58
+ if((fread(&stars, sizeof(stars), 1, fp)!=0)){
59
+ printf("%d年 %d月 %d日 %d時 %d分 %d秒\n",
60
+ stars->tm_year + 1900, stars->tm_mon + 1,
61
+ stars->tm_mday, stars->tm_hour, stars->tm_min, stars->tm_sec);
62
+ fread(&score, sizeof(double), 1, fp);
63
+ printf("得点(所要時間)は%.1f秒\n\n", score);
64
+ }
65
+ }
66
+ */
67
+ printf("count%d\n",count);
68
+ for(i = 0; i < count; i++ ){
69
+ printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n所要時間(score)は%.1f\n" // 構造体配列への読み込み
70
+ , stars[i].tm_year,stars[i].tm_mon,stars[i].tm_mday,
71
+ stars[i].tm_hour,stars[i].tm_min,stars[i].tm_sec,stars[i].score);
72
+
73
+ }
74
+
75
+
76
+ fclose(fp);
77
+ return 0;
78
+ }
79
+
80
+
81
+ /*
82
+ データファイル starsdata.txt を下記とすると
83
+
84
+ Brad_Pitt 183.2 73.4
85
+ Tom_Cruise 170.1 67.2
86
+ Johnny_Depp 178.2 70.5
87
+ Will_Smith 188.0 78.3
88
+ Bruce_Willis 184.0 78.3
89
+
90
+ 実行結果は
91
+ C:\MinGW\users\chap09\kadai>gcc -I. -o test4 test4.c -Wall
92
+
93
+ C:\MinGW\users\chap09\kadai>test4
94
+ count13
95
+ 2017年 9月 16日 8時 52分 18秒
96
+ 所要時間(score)は10.6
97
+ 2015年 12月 7日 19時 9分 59秒
98
+ 所要時間(score)は8.0
99
+ 2016年 1月 4日 1時 9分 11秒
100
+ 所要時間(score)は7.5
101
+ 2016年 1月 4日 19時 16分 8秒
102
+ 所要時間(score)は9.0
103
+ 2016年 1月 4日 19時 2分 44秒
104
+ 所要時間(score)は7.5
105
+ 2016年 1月 4日 22時 31分 52秒
106
+ 所要時間(score)は9.3
107
+ 2016年 1月 4日 23時 33分 50秒
108
+ 所要時間(score)は10.2
109
+ 2016年 1月 31日 21時 9分 53秒
110
+ 所要時間(score)は7.0
111
+ 2016年 2月 2日 8時 49分 9秒
112
+ 所要時間(score)は9.4
113
+ 2016年 2月 27日 12時 45分 26秒
114
+ 所要時間(score)は13.0
115
+ 2016年 2月 28日 2時 27分 20秒
116
+ 所要時間(score)は7.4
117
+ 2016年 5月 2日 16時 43分 32秒
118
+ 所要時間(score)は6.3
119
+ 2017年 9月 14日 10時 21分 18秒
120
+ 所要時間(score)は6.0
121
+
122
+ C:\MinGW\users\chap09\kadai>
123
+
124
+
20
125
  ```