跳过线并且不会将它们留在空白处

时间:2012-07-20 23:49:47

标签: c++ visual-studio-2010

我有一个非常基本的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 <<
    }
}

2 个答案:

答案 0 :(得分:0)

“跳过具有ofstream的行而不是已经存在的文本”是不可能的。

但您可以先在程序中存储文件的所有行。在处理文件时,如果要保持该行不变,则输出存储的行。

这实际上可以满足您的需求。

另外,你真的应该摆脱代码中的goto。它们应该仅在极少数情况下使用。对初学者来说,我总觉得在他们非常熟悉编程之前不应该使用它。

答案 1 :(得分: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相同。