2017-03-03 66 views
0

我想創建一些代碼來打開一個文件,閱讀內容,並檢查是否有幾個整數是相等的使用getline()。問題是它似乎只能用字符串工作,而不是用整數來完成。你可以幫幫我嗎?(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不一次讀取整數,只讀取一個字符串,整行。

如果我理解正確,那麼您正在尋找文件Datos.txt中的int dni。文件的格式是什麼?

假設它看起來是這樣的:

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

您可以使用stoi轉換你讀過成整數:

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(); 
} 

這不是測試。

1

C++有兩種類型getline
其中之一是std::string中的非成員函數。該版本從流中將提取爲std::string objectgetline。像:

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

另一種是一個輸入流std::ifstream的成員函數和該版本提取從流成陣列字符getline的像:

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

備註
兩個版本摘錄字符流不是一個真正的整數類型!


爲了回答您的問題,您應該知道您的文件中包含哪些類型的數據。像這樣的文件:I have only 3 $dollars!;當你嘗試讀取,通過使用std::getlineinput_stream.getline不能提取3在整數類型!!您可以使用operator >>來逐個提取單個數據,而不是使用getline;如:
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 
相關問題