Я читаю данные из файла в вектор строк с именем data
.И к этому вектору данных я отправляю новую строку через мой main с именем output_string
.Output_string - это просто комбинация аргументов, передаваемых через командную строку.После всего, что я пишу обратно в мой файл (обновите файл новой строкой).Однако, когда я делаю это, все после 1-го аргумента командной строки пропускает векторную позицию всякий раз, когда встречает data.push_back(output_string);
.
например, содержимое файла
bob
jack
snack
после считывания в вектор,
содержимое вектора данных
bob
jack
snack
после добавления новой строки, новая строка, являющаяся содержимым вектора данных "john", становится
bob
jack
snack
john
, но если я снова запускаю программу и использую командную строку, чтобы добавить что-то снова, она пропускает одну векторную позицию
bob
jack
snack
john
peter
и делает это для всего, что я добавлю послепервый.Почему это делается?
int main (int argc, char *argv[]){
if (argc > 6){
cout<<"[Error] too many inputs provided" << endl;
return 0;
}
commandProcess(argc,argv);
outputstringformat();
//*********
if (cominput.rem_contpos == -1){
readData(); //reads data from a file into vector data
int outlen = output_string.length();
if (outlen > 0){
data.push_back(output_string); //pushing what i had in argv to vector
}
cout<<"----------data vector------------"<<endl;
for (int i = 0; i < data.size();i++){
cout<<"data: " << data[i] << endl;
}
ofstream outfile("contactlist.dat");
number_of_contacts = data.size();
if(outfile.is_open()){
for (int i =0; i < number_of_contacts; i++){
outfile << data[i] << endl; //copying evertthing back to file, including the new argument passed to data
}
outfile.close();
}
}
return 0;
}
РЕДАКТИРОВАТЬ: также, как я обрабатываю свои аргументы, я объединяю их в одну строку.У меня есть подозрение, что это может быть проблемой, но все еще не вижу ее ...: |
void outputstringformat(){
if (cominput.name1.length() != 0 ){
output_string = cominput.name1;
}
if (cominput.name2.length() != 0 ){
output_string = output_string + " " + cominput.name2;
}
if (cominput.name3.length() != 0 ){
output_string = output_string + " " + cominput.name3;
}
if (cominput.email.length() != 0 ){
output_string = output_string + " " + cominput.email;
}
if (cominput.phone.length() != 0 ){
output_string = output_string + " " + cominput.phone;
}
}
обновлено с reaData
void readData(){
ifstream myfile("contactlist.dat");
if(myfile.is_open()){
while(!myfile.eof()){
getline(myfile,line);
data.push_back(line);
}
myfile.close();
}
}