Je lis les données d'un fichier dans un vecteur de chaînes appelé data
. Et à ce vecteur de données je push_back une nouvelle chaîne à travers mon principal appelé output_string
. Output_string est juste une combinaison des arguments passés dans la ligne de commande. Après avoir fait tout ce que je réécris dans mon fichier (mettre à jour le fichier avec la nouvelle chaîne). Cependant quand je fais ceci, tout après le premier argument de ligne de commande, il saute une position de vecteur chaque fois qu'il rencontre à nouveau data.push_back(output_string);
.sauter la position du vecteur lorsque pushing_back
par exemple le contenu du fichier
bob
jack
snack
après avoir lu dans le vecteur,
contenu vecteur de données
bob
jack
snack
après l'ajout d'une nouvelle chaîne, nouvelle chaîne étant données "john" le contenu vectoriel devient
bob
jack
snack
john
mais si je lance le programme à nouveau et utiliser la ligne de commande pour ajouter quelque chose de nouveau, il saute une position de vecteur
bob
jack
snack
john
peter
et il le fait pour tout ce que j'ajouter après la première. Pourquoi fait-il cela?
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;
}
EDIT: aussi voici comment je traite mes arguments, je les combine en une seule chaîne. J'ai un soupçon cela pourrait être le problème mais ne le vois toujours pas ...: |
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;
}
}
mis à jour avec reaData
void readData(){
ifstream myfile("contactlist.dat");
if(myfile.is_open()){
while(!myfile.eof()){
getline(myfile,line);
data.push_back(line);
}
myfile.close();
}
}
je vous remercie beaucoup! – silent