行が空かどうかをどのように検出できますか?
私が持っています:
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私が正しい場合...
Intを操作するので、getlineを使用してintに変換するのではなく、intとして読み取ります...
次のようになります。
#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.
お役に立てれば。
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」と異なるシステムを使用している場合、問題が発生します。行全体を読み取ってからデータを抽出することを検討してください。