2012-07-20 43 views
0

我有一个非常基本的ofstream()问题。我有一个匹配用户在文本文档中输入的数据的应用程序。我是否可以跳过带有ofstream的行,而不是已经在那里修改文本?如果可能的话,如何?请原谅我的英语不是太好。跳过行,不让它们留空w/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 << 
    } 
} 
+0

您能向我们展示您尝试过的所有结果以及您获得的结果吗? – chris 2012-07-20 23:50:58

+0

这里我将编辑它以显示到目前为止 – PrommeringsDisplay 2012-07-20 23:51:54

+0

那里我把我的代码到目前为止 – PrommeringsDisplay 2012-07-20 23:53:29

回答

0

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

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

这有效地做你想要的。

此外,你真的应该摆脱在你的代码goto s。它们只能在极少数情况下使用。而对于初学者,我总是觉得他们不应该使用它,直到他们非常熟悉编程。

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