2012-04-21 14 views
2

C++でテキストファイルを読むときに"\n"または"\r\n"などと何をするべきかに関する質問があります。私はf>>k後に終了"\n"を読み取るためにf.get()を配置する必要がありC++でテキストファイルを読む

1 
abc 

のようなもので、入力ファイルのため

int k; 
f>>k; 
string line; 
getline(f,line); 

:私は次の一連の操作を行うときに問題が存在します。もし私が"\r\n"を持っていれば、私はさらにf.get()をやらなければならない。

私が>>getlineと混ぜると、このようなファイルを読み上げるエレガントな方法は何ですか?

ありがとうございます。

編集 また、私はそこに、自動的に指定したファイルを検出するための任意の便利な方法です行末文字"\n"または"\r\n"を持っている場合だろうか。

答えて

4

>>getlineを少しでもうんざりして一緒に楽しく働かせる必要があります。一般に、>>演算子を使用してストリームから何かを読み取っても、次の空白(改行文字)は破棄されません。

これを解決するための通常の方法は、istream::ignore関数の後に、>>の後に次の改行までのすべての文字を破棄するように指示します。 (実際に改行まですべての文字を破棄したい場合にのみ便利です)。

#include <iostream> 
#include <string> 
#include <limits> 

int main() 
{ 
    int n; 
    std::string s; 
    std::cout << "type a number: "; 
    std::cin >> n; 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    std::cout << "type a string: "; 
    std::getline(std::cin, s); 
    std::cout << s << " " << n << std::endl; 
} 

編集(:: CINははifstreamと完全に交換可能である私はあなたの質問にファイルを述べ実現、うまくいけば、それはそれはstdを言うまでもない)

+1

ありがとうございます!私の編集を見てください: 'std :: cin.ignore(std :: numeric_limits :: max()、 '\ n');'時々私は "与えられた文を自動的に書く方法終了文字として\ n " –

+0

@QiangLiこれは '\ n'文字を含めて**すべての**文字を無視します。それらの文字が何であるかは関係ありません。その前に '\ r'を置くことは特別なことではないので、" \ r \ n "は" \ n "や" helloworld \ t \ n " 。 –

0

完全に異なるアプローチが事前にすることです - tr(Linuxを使用することを前提とします)を使用してデータファイルを処理し、\rを削除してからgetline()を使用します。

+0

いいえ、私は入力ファイルを変更したくありません。 –

関連する問題