【问题标题】:How to print data in struct that I've read from a file如何打印我从文件中读取的结构中的数据
【发布时间】:2017-03-25 07:33:27
【问题描述】:

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

我将文件读入初始化为结构的数组:

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 = "\n\n***** COMPLETED: files read ******\n\n";
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: \n\n" ;

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

【问题讨论】:

  • 我将来也需要对这些书进行排序,因此拥有一个结构数组将对将来的校对很有用。
  • 您正在打印结构成员的地址。写cout &lt;&lt; read_out_inventory[ARRAY_read] 而不是cout &lt;&lt; &amp;read_out_inventory[ARRAY_read]。只需删除&amp;
  • 删除cout &lt;&lt; ...中的所有&amp;s

标签: c++ arrays struct fstream


【解决方案1】:

你的代码和文件有很多错误

  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 = "\n\n***** COMPLETED: files read ******\n\n";
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;
}

【讨论】:

  • 谢谢!谢谢!我无法完全确定所有错误,并且已经查看了太久。
  • @TBurns 你非常欢迎我的朋友,请投票并将答案标记为已接受:)
【解决方案2】:

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

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

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

如果您只想打印值(不是地址) - 不要获取地址并“直接”输出您想要的内容,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多