Comment puis-je détecter si une ligne est vide?
J'ai:
1
2
3
4
5
Je lis ceci avec istream r donc:
int n;
r >> n
Je veux savoir quand j'atteins l'espace entre 4 et 5. J'ai essayé de lire en tant que caractère et d'utiliser .peek () pour détecter\n mais cela détecte le\n qui va après le numéro 1. La traduction de l'entrée ci-dessus est: 1\n2\n3\n4\n\n5\n si j'ai raison ...
Puisque je vais manipuler les entiers, je préfère les lire comme des entiers que d'utiliser getline puis de les convertir en int ...
Cela pourrait ressembler à ceci:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
istringstream is("1\n2\n3\n4\n\n5\n");
string s;
while (getline(is, s))
{
if (s.empty())
{
cout << "Empty line." << endl;
}
else
{
istringstream tmp(s);
int n;
tmp >> n;
cout << n << ' ';
}
}
cout << "Done." << endl;
return 0;
}
production:
1 2 3 4 Empty line.
5 Done.
J'espère que cela t'aides.
Si vous ne voulez vraiment pas utiliser getline, ce code fonctionne.
#include <iostream>
using namespace std;
int main()
{
int x;
while (!cin.eof())
{
cin >> x;
cout << "Number: " << x << endl;
char c1 = cin.get();
char c2 = cin.peek();
if (c2 == '\n')
{
cout << "There is a line" << endl;
}
}
}
Mais sachez que ce n'est pas portable. Lorsque vous utilisez un système qui a des caractères de fin de ligne différents de '\ n', cela pose un problème. Pensez à lire des lignes entières, puis à en extraire des données.