0

続く名前の数である番号を持つファイルがあります。例えば:

4
bob
jim
bar
ted

これらの名前を読み取るプログラムを作成しようとしています。

void process_file(ifstream& in, ofstream& out)
{
    string i,o;
    int tmp1,sp;
    char tmp2;
    prompt_user(i,o);
    in.open (i.c_str());

    if (in.fail())
    {
        cout << "Error opening " << i << endl;
        exit(1);
    }

    out.open(o.c_str());
    in >> tmp1;
    sp=tmp1;

    do
    {
        in.get(tmp2);
    } while (tmp2 != '\n');

    in.close();
    out.close();
    cout<< sp;
}

これまでのところ、最初の行を読み取り、int を sp に割り当てることができます

sp が名前の数のカウンターになる必要があります。名前を読むにはどうすればよいですか。私が残した唯一の問題は、最初の番号を無視して名前を取得する方法です。それまではループを実装できません。

4

4 に答える 4

0
int lines;
string line;
inputfile.open("names.txt");
lines << inputfile;
for(i=0; i< lines; ++i){   
   if (std::getline(inputfile, line) != 0){
      cout << line << std::endl;
   }
}
于 2013-04-02T10:41:19.573 に答える
0

まず、最初のループを次のように仮定します。

while (in >> tmp1)
    sp=tmp1;

最初に数字を読み取ることを意図しています。このコードは次のようにする必要があります。

in >> tmp1;

マニュアル によるとoperator>>

istream オブジェクト (*this)。

抽出された値またはシーケンスは返されませんが、引数として渡された変数に直接格納されます。

したがって、状態で使用しないでください。

in >> tmp1;
if( tmp1 < 1){
     exit(5);
}

第二に、ファイルが正しくフォーマットされているという仮定に決して依存しないでください。

do {
    in.get(tmp2);
    cout << tmp2 << endl;
} while ( (tmp2 != '\n') && !in.eof());

アルゴリズム全体が少し不器用に思えますが、これにより無限ループを防ぐことができます。

于 2013-04-02T10:41:22.360 に答える