Мой текстовый файл выглядит так
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();
}
По какой-то причине, когда я запускаю код, в окне редактирования в конечном итоге просто ничего нет, совершенно пустое.
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());
}
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.