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

回答編集履歴

5

コード編集

2017/07/06 14:39

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -4,6 +4,7 @@
4
4
  2、ループ条件を書いた後、そのループ内でifs.getを呼び出していること。
5
5
 
6
6
  追記:2がバグの原因です。見た感じ、偶数バイトのファイルでバグりそう(1ループごとに2字読んでいて、EOFはループ条件のとこで発生し、種類表示部にたどりつけない)ですが、省略している部分で、ファイルが空か調べるために1文字読み込んでいるため、奇数バイトのときバグっているのだと思います。
7
+
7
8
  ```C++
8
9
  ifstream ifs(path);
9
10
  if(!ifs){
@@ -16,5 +17,6 @@
16
17
  }
17
18
  else{
18
19
  cout << "ASCII" << endl;
20
+ }
19
- }```
21
+ ```
20
22
  サンプル加筆しました。分からないところは随時補足します。

4

加筆修正

2017/07/06 14:39

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -10,11 +10,11 @@
10
10
  cout << "fail to open";
11
11
  }
12
12
  int c;
13
- while((c = ifs.get()) != EOF && c >= 0x9);
13
+ while((c = ifs.get()) >= 0x9);
14
14
  if( c != EOF ){
15
15
  cout << "binary" << endl;
16
16
  }
17
17
  else{
18
18
  cout << "ASCII" << endl;
19
19
  }```
20
- これで解決しなければその旨書てください
20
+ サンプル加筆ました。分からないところは随時補足します

3

バグの修正

2017/07/06 13:35

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -5,7 +5,16 @@
5
5
 
6
6
  追記:2がバグの原因です。見た感じ、偶数バイトのファイルでバグりそう(1ループごとに2字読んでいて、EOFはループ条件のとこで発生し、種類表示部にたどりつけない)ですが、省略している部分で、ファイルが空か調べるために1文字読み込んでいるため、奇数バイトのときバグっているのだと思います。
7
7
  ```C++
8
+ ifstream ifs(path);
9
+ if(!ifs){
10
+ cout << "fail to open";
11
+ }
12
+ int c;
8
- while((c=ifs.get())!=EOF){
13
+ while((c = ifs.get()) != EOF && c >= 0x9);
9
- /*todo*/
14
+ if( c != EOF ){
15
+ cout << "binary" << endl;
16
+ }
17
+ else{
18
+ cout << "ASCII" << endl;
10
19
  }```
11
- というイディオムを使ってみては? これで解決しなければその旨書いてください。
20
+ これで解決しなければその旨書いてください。

2

追記

2017/07/06 13:33

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -1,9 +1,11 @@
1
1
  気になったのは2点
2
2
 
3
- 1、ファイルの中身が書いてないこと。サイズ等も知りい。
3
+ 1、ファイルの中身→拝見しまし、失礼しました
4
4
  2、ループ条件を書いた後、そのループ内でifs.getを呼び出していること。
5
+
6
+ 追記:2がバグの原因です。見た感じ、偶数バイトのファイルでバグりそう(1ループごとに2字読んでいて、EOFはループ条件のとこで発生し、種類表示部にたどりつけない)ですが、省略している部分で、ファイルが空か調べるために1文字読み込んでいるため、奇数バイトのときバグっているのだと思います。
5
7
  ```C++
6
8
  while((c=ifs.get())!=EOF){
7
9
  /*todo*/
8
10
  }```
9
- というイディオムを使ってみては?
11
+ というイディオムを使ってみては? これで解決しなければその旨書いてください。

1

誤字修正

2017/07/05 15:51

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  1、ファイルの中身が書いてないこと。サイズ等も知りたい。
4
4
  2、ループ条件を書いた後、そのループ内でifs.getを呼び出していること。
5
- ```C
5
+ ```C++
6
6
  while((c=ifs.get())!=EOF){
7
7
  /*todo*/
8
8
  }```