J'ai ce code:Omet le caractère de saut de ligne dans le fichier de lecture avec C++
#include <iostream>
#include <string>
#include <fstream>
int main()
{
std::ifstream path("test");
std::string separator(" ");
std::string line;
while (getline(path, line, *separator.c_str())) {
if (!line.empty() && *line.c_str() != '\n') {
std::cout << line << std::endl;
}
line.clear();
}
return 0;
}
Le fichier « test » est peuplé de nombres, séparés par divers nombre d'espaces. Je dois lire seulement les nombres, un par un et omettre les espaces et les nouvelles lignes. Ce code omet les espaces vides mais pas le caractère de retour à la ligne.
Ce sont quelques lignes du fichier d'entrée « test »:
3 19 68 29 29 54 83 53
14 53 134 124 66 61 133 49
96 188 243 133 46 -81 -156 -85
Je pense que le problème est que cette *line.c_str() != '\n'
n'est pas la bonne façon de déterminer si la chaîne line
caractère frappé nouvelle ligne et le programme conserve l'impression les nouvelles lignes!
Celui-ci fonctionne très bien:
#include <iostream>
#include <string>
#include <fstream>
int main()
{
std::ifstream path("test");
std::string separator(" ");
std::string line;
while (getline(path, line, *separator.c_str())) {
std::string number;
path >> number;
std::cout << number << std::endl;
}
return 0;
}
Au lieu de '* line.c_str() = « \ n'' vous devriez probablement vérifier que la ligne ne contient pas seulement des espaces. Difficile à dire sans voir un exemple de l'entrée (s'il vous plaît faites en sorte que nous puissions voir où se trouvent les caractères '' n'''). – user0042
Vous vérifiez seulement si le premier caractère est le retour à la ligne. Si un nombre est à la fin de la ligne, la nouvelle ligne sera le dernier caractère de 'line', pas le premier caractère. – Barmar
Pourquoi n'utilisez-vous pas 'path >> number;', qui ignorera tout espace et lira un seul nombre. – Barmar