如何在C++中从istream对象读取时检测空行



如何检测一行是否为空?

我有:

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"的结束行字符时,这将是一个问题。考虑读取整行,然后从中提取数据。

相关内容

  • 没有找到相关文章

最新更新