如何检测一行是否为空?
我有:
1
2
3
4
5
我和istream r一起读这篇文章所以:
int n;
r >> n
我想知道我什么时候到达4到5之间的空间。我试着读取为char并使用.peek()进行检测,但这检测到了数字1之后的字符。以上输入的翻译为:1\n2\n3\n4\n\n5\n如果我是正确的。。。
由于我要处理int,所以我宁愿将它们读为int,而不是使用getline然后转换为int…
它可能看起来像这样:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
istringstream is("1n2n3n4nn5n");
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.
希望这能有所帮助。
如果您真的不想使用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"的结束行字符时,这将是一个问题。考虑读取整行,然后从中提取数据。