我有一个程序,如果
任务如下: 定义产品结构(产品名称、类别、价格、库存数量)。 从文件trgovina.txt(可能已经包含预定义的产品。"就像我发布的图片一样") 通过以下功能: 1.从现有文件tgovina.txt中将产品加载到数组中 2.允许从文件proizvodi.txt打印产品名称(每个产品在新行中) 3.按类别启用产品搜索(从用户加载类别,并将产品和类别名称打印在屏幕上并写入名为“所需类别”的文件中) 4.启用在库存中少于10个的产品打印到文件lessthen10.txt中 5.允许在显示器上打印最昂贵和最便宜的产品 6.允许输入新产品到数据库中(将其写入文件trgovina.txt)
问题开始于此:这里:如果人在第一个黄色标记处停止编写,我想添加一个新行,以便当我想要添加新文本时,它会从新行开始。如果文本文件的结尾已经有一个新行,则我希望继续编写而不添加新行。
第二个问题是如果ofstream文件没有文本:在这种情况下,我不想添加新行。
抱歉我的英文不好。我在使用时遇到了一个错误。
ifstream
文件的结尾有 \n
,那么它可以完美地工作。任务如下: 定义产品结构(产品名称、类别、价格、库存数量)。 从文件trgovina.txt(可能已经包含预定义的产品。"就像我发布的图片一样") 通过以下功能: 1.从现有文件tgovina.txt中将产品加载到数组中 2.允许从文件proizvodi.txt打印产品名称(每个产品在新行中) 3.按类别启用产品搜索(从用户加载类别,并将产品和类别名称打印在屏幕上并写入名为“所需类别”的文件中) 4.启用在库存中少于10个的产品打印到文件lessthen10.txt中 5.允许在显示器上打印最昂贵和最便宜的产品 6.允许输入新产品到数据库中(将其写入文件trgovina.txt)
问题开始于此:这里:如果人在第一个黄色标记处停止编写,我想添加一个新行,以便当我想要添加新文本时,它会从新行开始。如果文本文件的结尾已经有一个新行,则我希望继续编写而不添加新行。
第二个问题是如果ofstream文件没有文本:在这种情况下,我不想添加新行。
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