1

私はC++の初心者です。オブジェクトの配列を介して(クラスに属する)変数の値を入力しました。次のように、テキストファイルの列ごとにそれらを書き込むにはどうすればよいですか?? ありがとう.........

SLNO    NAME      ADDRESS        PHONE NO     TYPE      
   1.   ABC       xyzagsgshsh    27438927     Mobile
   2.   QWE       qwhjbbdh       78982338     Landline

これは、データを保存するための私のコードです。以下のような内容のテキストファイルにするにはどうすればよいですか?

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

class emp
{
    string name,address,phone,type;
    public:
    void getdata();
}obj[5];

void emp::getdata()
{
    cout<<"\nEnter the details:";
    cout<<"\nName: ";cin>>name;
    cout<<"Address:";
    cin>>address;
    cout<<"Phone number: "; cin>>phone;
    cout<<"\nType of phone? (Landline/Mobile) :";
    cin>>type;
}

int main()
{
    ofstream ptr;
    ptr.open("Phone.dat",ios::out);
    cout<<"\nEnter the no.of.records: ";
    int n,i;
    cin>>n;
    for(i=0;i<n;i++)
    {
        obj[i].getdata();
        ptr.write((char*)&obj[i],sizeof(obj[i]));
    }
    return 0;
}
4

3 に答える 3

2

既にファイルストリームを作成しているため、出力フラグ (std::left、std::right、および std::setw) を利用できます。

http://www.cplusplus.com/reference/iomanip/setw/

http://www.cplusplus.com/reference/ios/left/

ここで、emp クラスの任意のオブジェクトに格納された文字列が、std::setw を介して ofstream/ostream に割り当てたサイズを超えないようにするために、string::resize を使用できます。

于 2013-03-28T12:18:15.513 に答える
0

それは文脈に依存します。コンソール ウィンドウへの単純な出力 (または固定幅のフォントを使用している場合、それはかなりまれですが) には、std::setw各要素の前に を使用して、フィールドの幅を指定できます。ただし、テキスト ( ) の場合は、 をそのまま使用して、最初から正しいサイズにするstd::string方が簡単な場合がよくあります。resize

于 2013-03-28T11:39:55.783 に答える
0

文字列/ファイルストリーム、改行、およびstd::setwを使用できます

ofstream myfile;
myfile.open ("example.txt");
myfile << "SLNO" << std::setw(10) << "NAME" << std::setw(10) << "ADDRESS" << std::setw(10) << "PHONE NO" << std::setw(10) << "TYPE\n";

これにより、すべてのテキストが10-text lenghtスペースで区切られ、example.txt

ファイルの有効性を確認し、ファイルを閉じることを忘れないでください。

于 2013-03-28T11:39:44.113 に答える