Le problème vient du fait que tu lui demande de lire des "lignes", ces lignes étant définies comme "un truc suivi d'un caractère espace". Espace uniquement, pas le caractère de fin de ligne du tout.
Du coup, ton getline va retourner les premières fois :
1 : 74.60038368625241
2 : 96.81124655492178
3 : 112.45476845156641\n96.81124655492178
Ensuite, le reste de ton code va interpréter ces chaînes, et le 96.81124655492178 sera donc oublié.
Mais à la base ton code est bien trop complexe pour ce qu'il devrait faire. Pour lire des nombres séparés par des caractères d'espaces, quels qu'ils soient (espace, tab, saut de ligne), et mettre le résultat dans un tableau de taile variable dont la taille s'adapte au nombre de données, il suffit de faire :
1 2 3 4 5 6 7
| vector<double> xoff;
ifstream fichier("test2.txt");
double x;
while (ifs >>x)
{
xoff.push_back(x);
} |
Si la séparation en lignes des données d'entrée a de l'importance, alors il faudra effectivement utiliser getline pour lire ligne à ligne, puis un istringstream pour découper chaque ligne en plusieurs doubles.
Par ailleurs, ton code mélange des facilités C avec d'autres C++, ce qui en rend le lecture peu cohérente. Je te conseille de finir de remplacer les FILE* et printf par les flux du C++, faisant de output_file2 un ofstream.
En outre, pour ce qui est de la gestion de la mémoire, vector est plus simple à gérer que l'allocation dynamique à base de new[]/delete[].
Partager