У меня есть программа, которая отлично работает, если есть \n
в конце файла ifstream
.Как проверить, есть ли новая строка или нет в конце файла ifstream. (C++)
Задача была такой: Определить структуру продукта (название, категория, цена, количество на складе). Из файла trgovina.txt (может уже содержать предопределенные продукты «Как и в картине я писал.) Через функции:
- 1 нагрузка на продукты в массиву из существующего файла tgovina.txt
- 2 Разрешить печать имени продукта из файла proizvodi.txt (каждый продукт в новой строке)
- включить поиск продуктов по категориям (загрузить категорию от пользователя и распечатать названия продуктов и категорий на экране и в файл, который назван «обязательной категорией»)
- Включить печать продукта, которое меньше 10 на складе в файле lessthen10.txt
- Разрешить печать самых дорогих и самых дешевых продуктов на дисплее
- Разрешить ввод новых продуктов в базу данных (записать их в файл trgovina.txt)
проблема начинается here: если человек перестает писать на первое желтого маркера, я хотел бы добавить новую строку, так что, когда я хочу, чтобы добавить новый текст, он начнется новая линия. Если в конце текстового файла уже есть новая строка, я хочу просто продолжить запись без добавления новой строки.
Вторая проблема заключается в том, что в исходном файле нет текста: в этом случае я не хочу добавлять новую строку.
ofstream dat("trgovina.txt", std::ios_base::app);
if (!dat)
{
cout << "Mistake!" << endl;
return;
}
string name;
string category;
bool a = true;
double price;
int quantity;
while (a)
{
**//Here I want to check if there is a "\n" sign at the end of text
//if there isn't I want to add one, and then continue writing.
// But if the text file was empty i dont want to add new line**
cout << "enter the name of new product: ";
getline(cin, name);
dat << name << "|";
cout << "enter the category of new product: ";
getline(cin, category);
dat << category << "|";
cout << "enter the price of new product: ";
cin >> price;
dat << price << "|";
cout << "enter the quantity of new product: ";
cin >> quantity;
dat << quantity << endl; **//This works if the txt file is empty or if
//there is "\n" at the end**
cout << "more? (1/0)";
cin >> a;
cin.ignore();
system("cls");
};
dat.close();
Извините за мой плохой английский.
Я получил сообщение об ошибке с помощью
while (a)
{
trgovina.seekg(-1);
char c;
trgovina.get(c);
if (c == '\n')
{
}
else
{
dat << endl;
}
Это изображение из текстового файла после запуска нескольких новых строк из этого кода. Он положил новую строку сверху, если файл был пуст, если он не работает.
У вас есть подсказки и 'getlines' во фрагменте кода, указывая на интерактивный вход, но вы 'чтение из текстового файла, где несколько частей данных находятся в одной строке. Это, скорее всего, неверно. Вы хотите читать в каждом поле по одному или читать строку и анализировать поля из нее. 'getline' не будет работать, когда будет достигнут конец ввода. Если есть пустая строка, вы будете читать пустую строку. – AndyG