0

我有一个非常基本的 ofstream() 问题。我有一个应用程序可以匹配用户在文本文档中输入的数据。我可以使用 ofstream 跳过行而不修改已经存在的文本吗?如果可能,怎么做?请原谅我的英语不太好。

#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

clientName我猜你想对用户多次输入相同或相同的情况做点什么caseNumber。您的问题实际上并不完全清楚这是您想要做的,但您问:

我有一个应用程序可以匹配用户在文本文档中输入的数据。我可以使用 ofstream 跳过行而不修改已经存在的文本吗?如果可能,怎么做?

但是,我在您的程序中没有看到任何匹配的逻辑。您只需记录多达 2999 个条目(因为您不使用0数组的条目),或者等到用户输入/end作为确认消息。

如果您有实际的匹配逻辑,您可以在输入时检测用户是否输入了 sameclientName或 same 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;
}

在此代码中,除 ay或之外的任何内容都/endn.

于 2012-07-21T00:46:30.240 回答
0

“使用 ofstream 跳过行而不修改已经存在的文本”是不可能的。

但是您可以先将文件的所有行存储在程序中。并且在您处理文件时,当您想要保持该行不变时输出存储的行。

这有效地做了你想要的。

此外,您确实应该摆脱goto代码中的 s 。它们只应在极少数情况下使用。而对于初学者来说,我总觉得在他们对编程非常熟悉之前不应该使用它。

于 2012-07-21T00:29:46.217 回答