我有一个非常基本的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 <<
}
}
答案 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
相同。