2016-12-31 16 views
-2

.txtドキュメントにデータを継続的に追加できる簡単なプログラムを作成しようとしています。私のコードを見てみましょう:ファイルを扱うC++プログラムの作成に問題がある

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() { 
    ofstream playersW("players.txt"); 
    ifstream playersR("players.txt"); 

    int id; 
    string name, info = ""; 
    float money; 

    while (playersR >> id >> name >> money) { 
     if (playersR.is_open()) { 
      info += to_string(id) + " " + name + " " + to_string(money) + "\n"; 
     } 
    } 

    playersW << info; 

    playersR.close(); 

    cout << "Enter player ID, Name and Money (or press 'CTRL+Z' + 'Enter' to quit):" << endl; 

    while (cin >> id >> name >> money) { 
     if (playersW.is_open()) { 
      playersW << id << " " << name << " " << money << endl; 
     } 
    } 

    playersW.close(); 
} 

私が欲しいものは、最初players.txtに格納されたデータを読み取り、その後、再びそれを書いてもプレイヤーに新しいデータを追加するためのプログラムです。 txt

編集:私は今持っているコードで、私のプログラムのみは、ファイルplayers.txtにユーザーが入力した新しい情報を書き込みます。ユーザーがそのループ改0または負のプレイヤーidに入るまで

+0

あなたのプログラムは現在何をしていますか? – user3684240

+0

ofstreamをappendモードで開いてみませんか? – Unimportant

+0

なぜこのような大きな文字列を作成してすべてのデータを保存するのですか?またクラス文字列 – Raindrop7

答えて

1

これは、それが最初にコンテンツを読み取り、それを表示するように、バイナリモードでファイルplayers.txtを開くことができます簡単なプログラムは、それが入力新しいプレイヤーにユーザーに確認され、ファイルを閉じて新しい追加コンテンツを保存します:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 

    fstream players("players.txt"); 

    int id; 
    string name, info = ""; 
    float money; 

    while (players >> id >> name >> money) 
     cout << name << " " << id << " " << money << endl; 

    players.clear(); 
    players.seekp(0, ios::end); 

    cout << "Enter player ID, Name and Money (or press 'CTRL+Z' + 'Enter' to quit):" << endl; 

    while(1) 
    { 
     cout << "id: "; 
     cin >> id; 
     cout << endl; 

     if(!cin || id <= 0) 
      break; 

     cout << "name: "; 
     cin >> name; 
     if(!cin) 
      break; 
     cout << endl; 

     cout << "money: "; 
     cin >> money; 
     if(!cin) 
      break; 
     cout << endl; 

     players << id << " " << name << " " << money << endl; 
    } 

    players.close(); 

    return 0; 
} 
+0

'if(id <= 0)// if break '不十分です。ストリーム操作の成功を確認することはありません。 –

+0

@LightnessRacesinOrbit:説明してください – Raindrop7

+0

ストリームの終わりに達したらどうなりますか?または、「無効な」データが見つかった場合ループはどのように終了しますか?あなたは[C++ 11と仮定していますか](http://stackoverflow.com/a/13379073/560648)? –

関連する問題