0

ユーザーが指定した削除する1行を除いて、各行を新しいテキストファイル(temp.txt)にコピーし、元のテキストファイル(staffMembers.txt)を削除して、テキストファイルから行を削除しています。 txt) を削除し、temp.txt の名前を staffMembers.txt に変更します。

staffMembers.txt の内容は次のとおりです。

1 | First Person | Manager | 123.45
2 | Second Person | Full Time | 123.45
3 | Third Person | Casual | 123.45

staffMembers.txt の内容を temp.txt にコピーすると、次のようになります。

1 | First Person | Manager | 123.45
2 | Second Person | Full Time | 123.45
3 | Third Person | Casual | 123.45
*** new line ***

テキストファイルの最後に新しい行が作成されないようにする方法を誰か説明してもらえますか? 私のコードは次のとおりです。

void deleteStaffMember()
{
    outStream.open("temp.txt", ios::app);

    if(outStream.fail())
    {
        cout << "Unable to open temp.txt.\n";
        exit(1);
    }

    inStream.open("staffMembers.txt");

    if(inStream.fail())
    {
        cout << "Unable to open staffMembers.txt.\n";
        exit(1);
    }
    else
    {
        cout << endl << "Please enter a staff members ID to delete: ";
        cin >> deleteLine;

        while(getline(inStream, line))
        {
            string firstCharacter;

            firstCharacter += line[0];

            if (firstCharacter != deleteLine)
            {
                outStream << line << endl;
            }
            else
            {
                inStream.close();

                outStream.close();

                cout << "Error. Unable to find staff member.\n" << endl;

                break;
            }
        }
    }

    inStream.close();

    outStream.close();

    remove("staffMembers.txt");

    rename("temp.txt", "staffMembers.txt");

    cout << "The staff member has been deleted successfully.\n" << endl;

    system("pause");

    system("cls");
}

outStream << line << endl;からendlを削除できません。temp.txt は次のようにフォーマットされているためです。

1 | First Person | Manager | 123.452 | Second Person | Full Time | 123.453 | Third Person | Casual | 123.45
4

3 に答える 3

1

コード:

if (firstCharacter != deleteLine)
{
    outStream << line << endl;
}

犯人である可能性が高いです。

行を出力してから、「endl」が行うことの 1 つである「\n」を追加します。

'line' が空の文字列、またはそれに近い場合を考えてみましょう。

代わりに次のコードを使用すると、動作が明らかになります。

if (firstCharacter != deleteLine)
{
    outStream << "{" << line << "}" << endl;
}

最後に、最後の行にどのように対応するかを決定します。yngum の答えはとても良いです。彼のコードを理解することをお勧めします。

(ヒント: '\n' は実際には「行末」を意味するのではなく、「行区切り」、「改行の開始」、または「行末」のいずれかとして解釈できます)

于 2013-05-02T04:41:22.460 に答える