0

I have a pretty basic ofstream() question. I have an app that matches data that was inputted by a user in a text document. Can i skip lines with ofstream and not modify text already there? If possible, how? Please forgive me my English isn't too great.

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

    int main()
{
    int count = 0;
    int num;
    int numcopy;
    string clientNames[3000];
    string caseNumbers[3000];
    int userInp = 1;
    string confirm = "2";

    cout << "Do you have a file already started (y/n)?"<<endl;
    cin >> confirm;

    if(confirm == "y")
    {
        goto input;
    }
    if(confirm == "n")
    {
        goto postinput;
    }

    input:

    cout << "What is the number of the query last entered?";
    cin >> userInp;
    num = userInp;
    numcopy = userInp;

    postinput:

    for(int i = 1; i <3000; i++)
    {
        userInp ++;
        repeat:
        cout <<"Enter Client's Name:";
        cin >> clientNames[userInp];
        cout << " " <<endl;
        cout <<"Enter Case Number:";
        cin>> caseNumbers[userInp];

        cout <<"Client Name "<< i << " "<<clientNames[userInp]<<endl;
        cout << "Case Number" << i << " "<<caseNumbers[userInp]<<endl;
        cout <<"Is This Correct?"<<endl;
        confirm == " ";
        cin >> confirm;
        if(confirm == "y")
        {
            cout <<"Confirmed"<<endl;
        }

        if(confirm == "n")
        {
            goto repeat;
        }

        if(confirm == "/end")
        {
            break;
        }

    }

    ofstream file;
    file.open("caseData.txt");
    for(int w = 0; w <3000;w++)
    {
        num++;
        file <<
    }
}
4

2 に答える 2

0

「ofstreamで行をスキップし、すでにそこにあるテキストを変更しない」ことはできません。

ただし、最初にファイルのすべての行をプログラムに保存できます。また、ファイルの処理中に保存した行をそのまま残したい場合は、その行を出力します。

これは、あなたが望むことを効果的に行います。

また、gotoコード内の s を削除する必要があります。それらはまれな場合にのみ使用する必要があります。また、初心者の場合は、プログラミングに慣れるまで使用すべきではないと常に感じています。

于 2012-07-21T00:29:46.217 に答える
0

clientNameユーザーが同じまたは同じものをcaseNumber複数回入力した場合の状況について何かしたいと推測します。あなたの質問からは、これがあなたがやりたいことであることが実際には完全には明らかではありませんが、あなたは尋ねました:

ユーザーがテキスト ドキュメントに入力したデータを照合するアプリがあります。ofstream で行をスキップして、既にそこにあるテキストを変更することはできますか? 可能であれば、どのように?

しかし、あなたのプログラムには一致するロジックがありませんでした。単純に最大 2999 エントリを記録するか (配列のエントリを使用しないため0)、またはユーザー/endが確認メッセージとして入力するまで待ちます。

clientName実際の一致ロジックがあれば、入力時にユーザーが同じまたは同じを入力したかどうかを検出できcaseNumber、ユーザーにそれに対して何をすべきかを尋ねることができます (たとえば、古い既存のエントリを保持し、新しく入力したエントリを保持します)。 . このようなロジックがあれば、一意のデータ行のみを出力することがわかるため、出力ループはかなり単純になります。

の使用についていくつかのコメントがありましたgoto。ラベルの代わりに、repeat:別のループを開始できます。

//repeat:
do {
    // ...read in input, echo it back, wait for confirmation...
    cin >> confirm;
    if (confirm == "y") {
        cout << "Confirmed" << endl;
        break;
    }
} while (confirm != "/end");
if (confirm == "/end") {
    break;
}

yこのコードでは、または以外のもの/endは と同じように扱われnます。

于 2012-07-21T00:46:30.240 に答える