如何在我从文件中读取的结构中打印数据

How to print data in struct that I've read from a file

本文关键字:读取 打印 数据 结构 文件      更新时间:2023-10-16

我正在编写一个程序来跟踪书店库存(起始代码(。该程序的功能之一是它可以以或多或少格式化的输出打印出整个库存。我已经让它打印出没有空格或空格的内容。

我将文件读取到初始化为结构的数组中:

struct Book //declare struct
{
int ISBN; //ISBN within struct
std::string Title; //Title within struct
std::string Author; //Author within struct
std::string Publisher; // Publisher within struct
int Quantity; //Quantity within struct
double Price; //price within struct
};

.txt文件的内容作为其特定数据类型被读入每个内存分配,然后每个被打印出来。

                                        /* READ CONTENTS OF INVENTORY*/
string readInventory(ifstream &readFile) //define readInventory, pass it a refrence to an infile
{
    const int ARRAY_size = 100;
string_book read_out_inventory[ARRAY_size];
ifstream inFile;
string stub = "nn***** COMPLETED: files read ******nn";
string buffer = " ";
inFile.open("inventory.txt");
if (!inFile.eof())
{
    for (int i = 0; i < ARRAY_size; ++i)
    {
        inFile >> read_out_inventory[i].ISBN;
        inFile >> read_out_inventory[i].Title;
        inFile >> read_out_inventory[i].Author;
        inFile >> read_out_inventory[i].Publisher;
        inFile >> read_out_inventory[i].Quantity;
        inFile >> read_out_inventory[i].Price;
    }
}
cout << setw(43) <<"The books are: nn" ;
for (int ARRAY_read = 0; ARRAY_read < ARRAY_size; ARRAY_read++)
{
    cout << &read_out_inventory[ARRAY_read].ISBN << endl;
    cout << &read_out_inventory[ARRAY_read].Title << endl;
    cout << &read_out_inventory[ARRAY_read].Author << endl;
    cout << &read_out_inventory[ARRAY_read].Publisher << endl;
    cout << &read_out_inventory[ARRAY_read].Quantity << endl;
    cout << &read_out_inventory[ARRAY_read].Price << endl;
}
return stub;

}

我遇到的问题(在其他明显的问题中(是输出是:

0x7fff5fbfe250
0x7fff5fbfe268
0x7fff5fbfe280
0x7fff5fbfe288
0x7fff5fbfe290
0x7fff5fbfe298
0x7fff5fbfe2b0
0x7fff5fbfe2c8
0x7fff5fbfe2e0
0x7fff5fbfe2e8
0x7fff5fbfe2f0
0x7fff5fbfe2f8
0x7fff5fbfe310
0x7fff5fbfe328
0x7fff5fbfe340
0x7fff5fbfe348
0x7fff5fbfe350
0x7fff5fbfe358
0x7fff5fbfe370
0x7fff5fbfe388
0x7fff5fbfe3a0
0x7fff5fbfe3a8
0x7fff5fbfe3b0
0x7fff5fbfe3b8
0x7fff5fbfe3d0
0x7fff5fbfe3e8
0x7fff5fbfe400
0x7fff5fbfe408
0x7fff5fbfe410
...

什至不完全确定我的问题是什么,所以帮助将不胜感激。我看到这个问题已经在另一个地方得到了回答,但我并不完全理解。

.txt文件如下所示:

20451
My First Book
Mark Lusk
Pearson Publishing
40
45.34
9780316
Brown Family
Mason Victor
Little Brown
36
105.99
1349877
Story of My Life
Norah M Jones
CreateSpace Independent Publishing Platform
20
18
1234567
The Big Book
Mypals Pennyweather
GreenThumb
4
13.23

您的代码和文件中有很多错误

  1. 打印时,您使用 & 运算符打印每个索引的地址。
  2. 您在打印整个数组时使用Array_size,但是您的文件只有 2-3 本书。
  3. 您的文本文件中有空格,您正在阅读超出限制数量的书籍。
  4. 这是我为您编写的修改后的代码,对我有用:)
string readInventory() //define readInventory, pass it a refrence to an infile
{
const int ARRAY_size = 100;
int countBooksInFile=0;
Book inventory[ARRAY_size];
ifstream inFile;
string stub = "nn***** COMPLETED: files read ******nn";
inFile.open("inventory.txt");
if (!inFile.eof())
{
    inFile >> ws;
    inFile >> inventory[countBooksInFile].ISBN;
    inFile >> ws;
    getline(inFile,  inventory[countBooksInFile].Title);
    inFile >> ws;
    getline(inFile ,inventory[countBooksInFile].Author);
    inFile >> ws;
    getline(inFile, inventory[countBooksInFile].Publisher);
    inFile >> ws;
    inFile >> inventory[countBooksInFile].Quantity;
    inFile >> ws;
    inFile >> inventory[countBooksInFile].Price;
    countBooksInFile++;
}
cout << "Total Books: " << countBooksInFile<<endl;
cout << "The books are: n";
for (int ARRAY_read = 0; ARRAY_read < countBooksInFile; ARRAY_read++)
{
    cout << inventory[ARRAY_read].ISBN << endl;
    cout << inventory[ARRAY_read].Title << endl;
    cout << inventory[ARRAY_read].Author << endl;
    cout << inventory[ARRAY_read].Publisher << endl;
    cout << inventory[ARRAY_read].Quantity << endl;
    cout << inventory[ARRAY_read].Price << endl;
}
return stub;
}

当你编写这样的一行代码时:

cout << &read_out_inventory[ARRAY_read].ISBN << endl;

正在做的是以下内容:您要求获取结构ISBN成员的地址(运算符 &(并将其打印出来。因此,您在输出中看到的是所有这些地址。

如果你只想打印值(不是地址( - 不要拿地址并"直接"输出你想要的东西,就像这样:

cout << read_out_inventory[ARRAY_read].ISBN << endl;