gpt4 book ai didi

c++ - 将多种数据类型写入文件时的额外行和额外数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:40 24 4
gpt4 key购买 nike

我放弃了这个项目并重新开始。请无视。

这里是新的。我有一项任务,但我的代码的编辑部分一直有问题。我会在下面发布它,但基本上代码所做的是将新项目添加到 txt 文件,然后从文件中读取并允许用户编辑数字。我现在只尝试进行加法,因为减法可以稍后处理。问题是,随着我读入数组的文件的每次连续“编辑”,文件变得越来越困惑。第一次,添加了额外的空行。第二次,添加了另一个额外的空行,并部分复制和粘贴了文件另一部分的信息。

非常感谢提前提供的任何帮助。我将在下面发布函数。

void BuyStock()     //Searches and Edits Customer Information

{
int i=0, j=0, n=0;
product item[1000];
int qty,q;
double cpi;
double price, p;


n=LineCount()-1;

i=ArrayAssign();
if (i>=n) cout << "No item found";

if (i>=n) return;

j=i;

ifstream FileSearch("stock.txt");
string name;

i=0;

if (FileSearch.is_open()){

while (!FileSearch.eof())
{
getline(FileSearch, name, '|');
item[i].name=name;
FileSearch >> qty;
item[i].qty=qty;
getline(FileSearch, name, '+');
FileSearch >> price;
item[i].price=price;
getline(FileSearch, name, '@');
FileSearch >> cpi;
item[i].cpi=cpi;
i++;
}

}

else cout << "Error" << endl;

FileSearch.close();

cout << item[j].name << " " << item[j].qty << " " << item[j].price << " " << item[j].cpi << endl;

cout << "Type in the changes, according to category. Retype if you want to keep the same data." << endl; //Editing Section

cin.ignore();

cout << "Item name: " << item[j].name << endl;

cout << "Item quantity: ";
cin >> qty;
cin.ignore();
q = item[j].qty;
item[j].qty = q + qty;

cout << "Item price: ";
cin >> price;
cin.ignore();
p = item[j].price;
item[j].price = p + price;

item[j].cpi = item[j].price/item[j].qty;

ofstream FileSave("stock.txt");

for (j=0; j<n; j++){

FileSave << item[j].name << " | " ;
FileSave << item[j].qty << " + ";
FileSave << item[j].price << " @ " ;
FileSave << item[j].cpi;
FileSave << endl;}

return;

编辑:当尝试使用 for 循环在 cmd 中打印数组时,我注意到它本质上是在数组的 2 个元素之间重复自身,或者在将一个数组留空后重复自身。

最佳答案

好吧,决定解释我最后的评论:

我怀疑问题的肇事者是以下几行:

for (j=0; j<n; j++){

FileSave << item[j].name << " | " ;
FileSave << item[j].qty << " + ";
FileSave << item[j].price << " @ " ;
FileSave << item[j].cpi;
FileSave << endl;}

让我们看看这些在只有一行的实际文档上实际做了什么。 n=1,所以循环从 j=0 开始,只运行一次。我们将所有内容写入第一行,然后,为了结束循环,我们添加一个换行符,有效地创建了 2 行。第一个包含有效信息,第二个包含换行符。这一没有信息的新行会使我们的程序在后续尝试中感到困惑。

所以我们可以通过不在最后一个位置放置换行符来结束循环,然后看起来像:

for (j=0; j<n; j++){
FileSave << item[j].name << " | " ;
FileSave << item[j].qty << " + ";
FileSave << item[j].price << " @ " ;
FileSave << item[j].cpi;
if(j!=n-1){FileSave << endl;}
}

遗憾的是,我还不能测试代码,但我希望你能使用它:9

edit::好吧,因为那没用:

我的第二个怀疑是名称可能以换行符开头,因为换行符永远不会被使用。我们可能会尝试做类似的事情:

while (!FileSearch.eof()){
getline(FileSearch, name, '|');
item[i].name=name;
FileSearch >> qty;
item[i].qty=qty;
getline(FileSearch, name, '+');
FileSearch >> price;
item[i].price=price;
getline(FileSearch, name, '@');
FileSearch >> cpi;
item[i].cpi=cpi;
getline(FileSearch,name);
i++;
}

仍然不确定这是否是正确的解决方案。

每次编辑前后有关文本文档状态的任何和所有信息都非常有用:)

关于c++ - 将多种数据类型写入文件时的额外行和额外数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com