如何检测线是否为空?
我有:
1
2
3
4
5
我正在用istream r读这个 这样:
int n;
r >> n
我想知道什么时候到达4到5之间的空间。 我尝试读取为char并使用.peek()来检测\ n但是这会检测到数字1之后的\ n。上面输入的翻译是:1 \ n2 \ n3 \ n4 \ n \ n5 \ n如果我是正确的......
由于我要操作整数,我宁愿将它们作为整数读取而不是使用getline然后转换为int ......
答案 0 :(得分:18)
看起来像这样:
#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;
}
输出:
1 2 3 4 Empty line.
5 Done.
希望这有帮助。
答案 1 :(得分:5)
如果你真的不想使用getline,这段代码就可以了。
#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;
}
}
}
但请注意,这不是便携式的。当您使用具有与'\ n'不同的结束行字符的系统时,那将是问题。考虑读取整行,然后从中提取数据。