(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