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

回答編集履歴

4

訂正

2018/01/06 04:51

投稿

nullpon
nullpon

スコア5739

answer CHANGED
@@ -2,16 +2,16 @@
2
2
  これを元ファイルから読み込めなくなるまで回せばファイルのコピーができますね。
3
3
  あとは1行書き出す直前に行に削除する名前が含まれているかチェックする処理を挟むだけです。
4
4
 
5
- 追記
5
+ 追記3
6
6
  以下の行をループの外に出して下さい。クローズするのは書き込みが全部終わった後です。
7
7
  > fclose(fp2);
8
8
 
9
+ 以下の部分ですが、先にi++してしまうと、line[i]には値が入っていません。
10
+ そもそも、マッチする値が見つかった場合は、fp2に出力する必要はありません。
11
+ > i++;
12
+ > fputs(line[i],fp2);
13
+
9
14
  また、1行ずつ読み込んで処理しているので、line[i],line2[i]は毎回使い捨てになります。
10
- Max個用意する必要はありません。(ただし、プログラムの動作に支障はので後で見直て下さい)
15
+ Max個用意する必要はありません。ここを整理すると変数iも必要くなるのでソースがかなりスッキリます。
11
16
  > char line[Max][40]={0};
12
- > char line2[Max][40]={0};
17
+ > char line2[Max][40]={0};
13
-
14
- 追記2
15
- 以下の部分ですが、先にi++してしまうと、line[i]には値が入っていません。
16
- > i++;
17
- > fputs(line[i],fp2);

3

追記

2018/01/06 04:51

投稿

nullpon
nullpon

スコア5739

answer CHANGED
@@ -9,4 +9,9 @@
9
9
  また、1行ずつ読み込んで処理しているので、line[i],line2[i]は毎回使い捨てになります。
10
10
  Max個用意する必要はありません。(ただし、プログラムの動作に支障はないので後で見直して下さい)
11
11
  > char line[Max][40]={0};
12
- > char line2[Max][40]={0};
12
+ > char line2[Max][40]={0};
13
+
14
+ 追記2
15
+ 以下の部分ですが、先にi++してしまうと、line[i]には値が入っていません。
16
+ > i++;
17
+ > fputs(line[i],fp2);

2

追記

2018/01/06 04:45

投稿

nullpon
nullpon

スコア5739

answer CHANGED
@@ -1,3 +1,12 @@
1
1
  まず、元ファイルから1行読み込んで、別ファイルに1行書き出す処理を考えましょう。
2
2
  これを元ファイルから読み込めなくなるまで回せばファイルのコピーができますね。
3
- あとは1行書き出す直前に行に削除する名前が含まれているかチェックする処理を挟むだけです。
3
+ あとは1行書き出す直前に行に削除する名前が含まれているかチェックする処理を挟むだけです。
4
+
5
+ 追記
6
+ 以下の行をループの外に出して下さい。クローズするのは書き込みが全部終わった後です。
7
+ > fclose(fp2);
8
+
9
+ また、1行ずつ読み込んで処理しているので、line[i],line2[i]は毎回使い捨てになります。
10
+ Max個用意する必要はありません。(ただし、プログラムの動作に支障はないので後で見直して下さい)
11
+ > char line[Max][40]={0};
12
+ > char line2[Max][40]={0};

1

追記

2018/01/06 04:38

投稿

nullpon
nullpon

スコア5739

answer CHANGED
@@ -1,2 +1,3 @@
1
1
  まず、元ファイルから1行読み込んで、別ファイルに1行書き出す処理を考えましょう。
2
+ これを元ファイルから読み込めなくなるまで回せばファイルのコピーができますね。
2
- あとは1行書き出す直前に削除する名前が含まれているかチェックする処理を挟むだけです。
3
+ あとは1行書き出す直前に行に削除する名前が含まれているかチェックする処理を挟むだけです。