2016-09-24 7 views
0

私は入力テキストファイルを持っています。最初の行にはintの数字がab、2行目が文字列です。私はfile >> a >> bを行うために書式化された入力を使い、文字列の文字を一つずつ取得するために書式なしの入力をしたい。 2つのステップの間で、最初の行の末尾にある'\n'文字をスキップする必要があります。私はC++でフォーマットされた入力からフォーマットされていない入力に切り替える

while(file.get()<=' ' && !file.eof()); // skip all unprintable chars 
    if(!file.eof()) file.unget();   // keep the eof sign once triggered 

を入力フォーマットをより柔軟にするために使用しました。ユーザは数字abを分離するのと同じ自由度で、任意の数の空白の行'\n'、タブキー'\t'、および/またはスペースキー' 'を使用して、数字abを文字列から分離できるようになりました。 Linuxでは、行末がすべて"\r\n"になると、Windowsからコピーされたテキストファイルを読むのに問題はありません。

同じことをするifstream関数があります(次の印刷可能な文字またはEOFに達するまで、すべての文字をスキップします)。<=' 'ignore関数はそうではないようです。

答えて

2

はい、あります:std::wsマニピュレータ。空白文字が見つからないか、ストリームの終わりに達するまで、空白文字をスキップします。scanf書式文字列の空白文字の使用に似ています。

実際には、文字の解析を実際に開始する前に、書式付き入力によって使用されます。

int x; 
std::string str; 
std::cin >> x >> std::ws; 
std::getline(std::cin, str); 
//... 
//std::vector<int> vec; 
for(auto& e: vec) { 
    std::cin >> e; 
} 
std::getline(std::cin >> std::ws, str); 
+1

空白が '<= '「'として定義されていないので、これはOPのソリューションと同等ではありません。

あなたはそのようにそれを使用することができます。しかしながら、記載されているように、OPの実際の要件を満たすことができる。 –

+0

ハードコードされた 'n 'を持つ配列へのベクトルを好む –

+0

@ LightnessRacesinOrbit実際には、ユーザー提供のサイズ:PのVLAでした。しかし、修正されました。 –

関連する問題