Проблема, с которой я сталкиваюсь, заключается в том, что мой текстовый файл заканчивается новой строкой
Это не проблема. Когда вы пытаетесь читать элементы как можно дольше (и для этого ваш код должен быть while (electronicsFile >> barcode >> name >> price);
), вы будете сталкиваться с установленным битом сбоя, потому что это то, что вам мешает чтение с electronicsFile
до бесконечности . Вы всегда можете clear()
поток, хотя.
Если вы действительно хотите проверить, является ли файл некорректным во время чтения, вы можете проверить каждый оператор чтения отдельно плюс * проверка .eof()
, а не .fail()
:
int main() {
std::fstream electronicsFile {"logi.txt"};
int barcode = 0;
std::string name;
double price = 0.0;
try {
for (auto c = electronicsFile.get(); !electronicsFile.eof();) {
electronicsFile.putback(c);
const auto message = "Error reading electronics file";
if (!(electronicsFile >> barcode)) throw std::runtime_error(message);
if (!(electronicsFile >> name)) throw std::runtime_error(message);
if (!(electronicsFile >> price)) throw std::runtime_error(message);
}
} catch (const std::runtime_error& ex) {
std::cerr << ex.what();
}
}
Это будет правильно проходить через процесс выполнения для правильных данных, хранящихся в файле, и будет прервано, а также напечатает сообщение об исключении в случае неверных данных файла.