Искать в .txt файле в C ++ только получить это первая строка

0

У меня есть какая-то программа резервирования номеров, поэтому я хочу искать в.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;

}

  • 1
    Это потому, что вы ставите return после прочтения первой строки. Ваша программа делает только то, что вы сказали.
  • 0
    Было бы полезно, если бы вы могли систематически делать отступы для своего кода, чтобы он помогал людям, которые хотели бы помочь вам.
Теги:
file
search

1 ответ

2
Лучший ответ

Вы прекращаете выполнение функции, возвращая значение в обоих случаях оператора 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;
}
  • 2
    Хороший ответ, кроме пункта о myfile.close() . Деструктор ofstream закроет файл, однако функция завершена. Закрытие файла явно не нужно (хотя и не так).
  • 0
    Спасибо Джон, я не знал об этом.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню