Мой текстовый файл выглядит так

Fruit 
Vegetable

И мне нужно, чтобы функция возвращала Vegetable

Вот код, который я пытался использовать и получить "Овощи":

String getItem()
{
ifstream stream("data.txt");

stream.ignore ( 1, '\n' );

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

std::string word;
return word.c_str();
} 

Затем я сделал это, чтобы попытаться поместить вторую строку в поле редактирования:

void __fastcall TMainForm::FormShow(TObject *Sender)
{
    Edit1->Text = getItem();
}

По какой-то причине, когда я запускаю код, в окне редактирования в конечном итоге просто ничего нет, совершенно пустое.

0
Jordan Houston 20 Июл 2020 в 06:22

1 ответ

Лучший ответ

Первый параметр istream::ignore() выражается символами , а не строками . Таким образом, когда вы вызываете stream.ignore(1, '\n'), вы игнорируете только 1 символ (т. Е. F из Fruit), а не 1 строку .

Чтобы игнорировать всю строку, вам нужно передать std::numeric_limits<streamsize>::max() вместо 1. Это говорит ignore() игнорировать все символы, пока не встретится указанный терминатор ('\n').

Кроме того, вы return вводите пустой String. Вы игнорируете line, который вы читаете с помощью std::getline().

Попробуйте вместо этого:

#include <fstream>
#include <string>
#include <limits>

String getItem()
{
    std::ifstream stream("data.txt");

    //stream.ignore(1, '\n');
    stream.ignore(std::numeric_limits<streamsize>::max(), '\n');

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

    return line.c_str();
    // or: return String(line.c_str(), line.size());
} 
0
Remy Lebeau 20 Июл 2020 в 23:57