У меня есть какая-то программа резервирования номеров, поэтому я хочу искать в.txt файле, чтобы я мог найти предварительно зарезервированные комнаты.
проблема в:
Функция поиска только считывает первую строку в TXT файле, поэтому, когда я ввожу дублированную информацию, она проверяет только первую строку
может у помочь мне с этим Спасибо
int search(int search_num){
string search= to_string(search_num);
int offset;
string line ;
ifstream myfile;
myfile.open("booked.txt", ios::app);
ofstream booked ("booked.txt", ios ::app);
if(myfile.is_open())
{
while(!myfile.eof())
{
getline(myfile,line);
if((offset=line.find(search,0))!=string :: npos)
{
return 1;
}
else {
return 2;
}
}
myfile.close();
}
else
cout <<"Couldn't open" << endl;
}
Вы прекращаете выполнение функции, возвращая значение в обоих случаях оператора if. Возврат значения завершает выполнение функции, поэтому вы всегда заканчиваете чтение первой строки. Я предполагаю, что вы хотите переместить return 2;
до самого конца вашей функции.
Обратите внимание, что таким образом вы также всегда return
без вызова myfile.close()
что может вызвать проблемы в другом месте. Хотя я не понимаю смысла ваших возвращаемых значений 1 и 2, я предлагаю следующее:
int search(int search_num){
string search= to_string(search_num);
int offset;
string line ;
ifstream myfile;
myfile.open("booked.txt", ios::app);
int return_value = 2;
ofstream booked ("booked.txt", ios ::app);
if(myfile.is_open()) {
while(!myfile.eof()) {
getline(myfile,line);
if((offset=line.find(search,0))!=string :: npos) {
return_value = 1;
break;
}
}
myfile.close();
} else {
cout <<"Couldn't open" << endl;
}
return return_value;
}
myfile.close()
. Деструктор ofstream закроет файл, однако функция завершена. Закрытие файла явно не нужно (хотя и не так).
return
после прочтения первой строки. Ваша программа делает только то, что вы сказали.