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

回答編集履歴

2

それぞれのファイルに重複がない場合のコードを追加

2021/01/14 15:23

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -58,4 +58,35 @@
58
58
  1.1111000000000E+01 1.1111000000000E+01 1.1111000000000E+01
59
59
  5.5555000000000E+01 5.5555000000000E+01 5.5555000000000E+01
60
60
  6.6666000000000E+01 6.6666000000000E+01 6.6666000000000E+01
61
+ ```
62
+ **追記**
63
+ それぞれのファイルに重複がないのなら、
64
+ 1つめのファイルの内容を全部覚えておいて、
65
+ 2つめのファイルの値がそこにあるかどうかをチェックすればよいでしょう。
66
+ ```C
67
+ #include <stdio.h>
68
+
69
+ int main(void)
70
+ {
71
+ FILE *f1 = fopen("f1.txt", "r");
72
+ if (!f1) return 1;
73
+ FILE *f2 = fopen("f2.txt", "r");
74
+ if (!f2) return 2;
75
+ FILE *f3 = fopen("f3.txt", "w");
76
+ if (!f3) return 3;
77
+ int point1[1][1] = { 4 }, point2[1][1] = { 3 };
78
+ double ep[1024][3], p[3];
79
+ int n = 0, i;
80
+ for (; n < 1024 && fscanf(f1, "%lf%lf%lf", ep[n], ep[n]+1, ep[n]+2) == 3; n++)
81
+ fprintf(f3, "%24.13E%24.13E%24.13E\n", ep[n][0], ep[n][1], ep[n][2]);
82
+ if (n == 1024) { puts("too many data"); return 4; }
83
+
84
+ while (fscanf(f2, "%lf%lf%lf", p, p+1, p+2) == 3) {
85
+ for (i = 0; i < n; i++)
86
+ if (ep[i][0] == p[0] && ep[i][1] == p[1] && ep[i][2] == p[2]) break;
87
+ if (i == n)
88
+ fprintf(f3, "%24.13E%24.13E%24.13E\n", p[0], p[1], p[2]);
89
+ }
90
+ fclose(f1), fclose(f2), fclose(f3);
91
+ }
61
92
  ```

1

コードの修正

2021/01/14 15:23

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -9,8 +9,7 @@
9
9
  if (n >= 1024) { puts("too many data"); exit(1); }
10
10
  for (int i = 0; i < 3; i++) e[n][i] = p[i];
11
11
  for (int i = 0; i < n; i++)
12
- if (e[i][0] == p[0] && e[i][1] == p[1] && e[i][2] == p[2])
12
+ if (e[i][0] == p[0] && e[i][1] == p[1] && e[i][2] == p[2]) return 0;
13
- return 0;
14
13
  return 1;
15
14
  }
16
15
 
@@ -21,7 +20,7 @@
21
20
  FILE *f2 = fopen("f2.txt", "r");
22
21
  if (!f2) return 2;
23
22
  FILE *f3 = fopen("f3.txt", "w");
24
- if (!f3) return 2;
23
+ if (!f3) return 3;
25
24
  int point1[1][1] = { 4 }, point2[1][1] = { 3 };
26
25
  double epoint[1024][3], p[3];
27
26
  int n = 0;