(C++) Как я могу использовать getline() с целым числом при чтении файла?

Я пытаюсь создать некоторый код, чтобы открыть файл, прочитать содержимое и проверить, равны ли пара целых чисел с помощью 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();
}

3 ответа

Функция-член getline() используется для извлечения строкового ввода. Поэтому было бы лучше, если бы вы вводили данные в виде строки, а затем использовали "стои" (обозначает строку в целое число), чтобы извлечь только целочисленные значения из данных строки. Вы можете проверить, как использовать "стои" отдельно.

getline не читает целое число, только строку, целую строку за раз.

Если я правильно понимаю, вы ищете int dni в файл Datos.txt, Какой формат файла?

Предполагая, что это выглядит примерно так:

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

Это не проверено.

C++ имеет два типа getline,
Одна из них не является функцией в std::string, Эта версия извлекает из потока в std::string object getline. Подобно:

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

Другой является функцией-членом потока ввода, как std::ifstream и эта версия извлекает из потока в массив символов getline, как:

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

НОТА
Обе версии извлекают символы из потока, а не настоящий целочисленный тип!


Чтобы получить ответ на свой вопрос, вы должны знать, какой тип данных у вас есть в вашем файле. Файл как это: I have only 3 $dollars!; когда вы пытаетесь прочитать это, используя std::getline или же input_stream.getline вы не можете извлечь 3 как в целочисленном типе! Вместо getline ты можешь использовать operator >> извлекать отдельные данные один за другим; лайк:
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
Другие вопросы по тегам