2017-03-03 8 views
0

ファイルを開いて内容を読み、getline()を使用して2つの整数が等しいかどうかを確認するコードを作成しようとしています。問題は、整数だけでなく、文字列でしか動作しないように見えることです。私たちを手伝ってくれますか?(C++)ファイルを読み取っているときにgetline()を整数で使用するにはどうすればよいですか?

fstream ficheroEntrada; 
string frase; 
int dni, dnitxt; 
int i=0; 
int time; 

cout << "Introduce tu DNI: "; 
cin >> dni; 

ficheroEntrada.open ("Datos.txt",ios::in); 
if (ficheroEntrada.is_open()) { 
    while (! ficheroEntrada.eof()) { 
     getline (ficheroEntrada, dnitxt); 
     if (dnitxt == dni){ 
      getline (ficheroEntrada, frase); 
      cout << dni << " " << frase << endl;   
     }else{ 
      getline (ficheroEntrada, dnitxt); 
     } 
    } 
    ficheroEntrada.close(); 
} 
+1

は 'ficheroEntrada >> dnitxtを使用してください;'代わりに。 –

+0

あなたの問題に役立つ回答がありましたか?さらなるフィードバックを心がけてください。 –

答えて

1

getline()メンバー関数は、文字列入力を抽出するために使用されます。だから、文字列の形式でデータを入力し、文字列データから整数値だけを抽出するために "stoi"(文字列を整数にする)を使用する方が良いでしょう。 「stoi」の使い方を別々に確認できます。

0

getline整数を読み取るのではなく、一度に1行の文字列だけを読み込みます。

私が正しく理解していれば、をファイルDatos.txtに探しています。ファイルの形式は何ですか?

string dni_buffer; 
int found_dni 
if (ficheroEntrada.is_open()) { 
    while (! ficheroEntrada.eof()) { 
     getline (ficheroEntrada, dni_buffer); 
     found_dni = stoi(dni_buffer); 
     if (found == dni){ 
      getline (ficheroEntrada, frase); 
      cout << dni << " " << frase << endl;   
     }else{ 
      // discard the text line with the wrong dni 
      // we can use frase as it will be overwritten anyways 
      getline (ficheroEntrada, frase); 
     } 
    } 
    ficheroEntrada.close(); 
} 

これはテストされていません:あなたは整数に何を読んで変換することstoiを使用することができます

4 
the phrase coressponding to 4 
15 
the phrase coressponding to 15 
... 

:それは次のようになりますと仮定

1

C++には、2種類のgetlineがあります。
これらのうちの1つは、std::stringの非メンバー関数です。このバージョンは、std::string objectgetlineにストリームからを抽出します。等:

std::string line; 
std::getline(input_stream, line); 

他方は次のように文字getline配列にstd::ifstream入力ストリームこのバージョンストリームから抽出のメンバ関数である:

char array[ 50 ]; 
input_stream(array, 50); 


両方のバージョンは、ストリームから文字を抽出します。NOT実整数型!


質問に対する回答を得るためには、ファイルにどのような種類のデータがあるかを知る必要があります。このようなファイル:I have only 3 $dollars!;あなたがそれを読むときに、std::getlineまたはinput_stream.getlineを使用してを抽出できません整数型のように3getlineの代わりにoperator >>を使用すると、1つ1つのデータを1つずつ抽出できます。 like:
input_stream >> word_1 >> word_2 >> word_3 >> int_1 >> word_4;。今

int_1は値ました:3


実践例

std::ifstream input_stream("file", std::ifstream::in); 
int number_1; 
int number_2; 
while(input_stream >> number_1 >> number_2){ 
    std::cout << number_1 << " == " << number_2 << " : " << (number_1 == number_2) << '\n'; 
} 
input_stream.close(); 

出力:

10 == 11 : 0 
11 == 11 : 1 
12 == 11 : 0