質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4074閲覧

c++におけるfstreamを使用した際のファイルの読み込みについて

Daichi

総合スコア47

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/03/29 04:11

編集2015/03/29 04:49

テキストファイルに、
数字が入っててその数字を読み込んでvectorに入れて表示した際に
なぜか最後の数字が2回読み込まれるのですが、なぜでしょうか??
以下、コードです。

![イメージ説明]WIDTH:435

code.txtの内容は以下の通りです。
![イメージ説明]WIDTH:600

実行結果が以下の通りです。
![イメージ説明]WIDTH:600

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

while を次のようにするとよいです。

lang

1while(true) { 2 int suji; 3 ifs >> suji; 4 if (ifs.eof()) { 5 break; 6 } 7 cout << suji << " "; 8 v.push_back(suji); 9}

あるいは、次のようにしてもよいです。

lang

1while(ifs >> suji) { 2 cout << suji << " "; 3 v.push_back(suji); 4}

eof() が true になるのは、最後の数字 を読んだ後に さらに ifs >> suji を実行した後です。
質問文にある while の回り方の場合、 最後の 数字 を読んだ後は まだ eof() は false です。
そして 次に ifs >> suji を実行したとき suji には値が設定されません。
(suji の値は 最後の数字 のまま)
値が設定されないことは 質問文の while を

lang

1while(...) { 2 int suji = -999 3 ... 4}

のようにして、実行してみるとよいです。
.... -999 と出力されるはずです。

while(ifs >> suji) とした場合は、最後の数字を読んだ後に while の条件文の ifs >> suji が false になって、while を抜けてくれます。

投稿2015/03/29 05:17

編集2015/03/29 14:27
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daichi

2015/03/29 06:05

わかりやすい解説ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問