无法在C ++

时间:2017-03-05 14:19:48

标签: c++ fstream binaryfiles

我的代码正在运行,但无法读取我输入的二进制文件的输出。它给了垃圾价值。该程序旨在允许用户选择一个选项。

  1. 添加项目并将其写入二进制文件。

  2. 显示已读取的二进制文件的输出。

  3. 任何帮助?

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    struct info
    {
        char name[50];
        int price, quantity;    
    };
    
    void AddItem(info item)
    {
        cin.ignore();
        cout<<"Enter the following data about an item: \n";
        cout<<"Item name: ";
        cin.getline(item.name,50);
        cout<<"Price per item: RM";
        cin>>item.price;
        cout<<"Quantity: ";
        cin>>item.quantity;
    
    }
    
    void DisplayItems(info item)
    {
        cout<<"Item name: "<<item.name<<endl;
        cout<<"Price per item: "<<item.price<<endl;
        cout<<"Quantity: "<<item.quantity<<endl;    
    }
    
    int main()
    {
        info item;
        int option;
        char again;
    
        cout<<"1. Add new item in the product file\n";
        cout<<"2. Display all items\n";
        cout<<"3. Exit\n";
        cout<<"select option: ";
        cin>>option;
    
        if(option==1)
        {
            fstream file("report.dat", ios::out|ios::binary);
            do
            {
                AddItem(item);
                file.write(reinterpret_cast<char*>(&item), sizeof(item));
                cout<<"Do you want to enter another record? (Y/N): ";
                cin>>again;
            }
            while(again=='Y'||again=='y');  
        }
    
        if(option==2)
        {
            fstream file("report.dat", ios::in|ios::binary);
            if(!file)
            {
                cout<<"Error in opening the file!";
                return 0;
            }
    
           file.read(reinterpret_cast<char*>(&item),sizeof(item));
            while(!file.eof())
            {
                DisplayItems(item);
                file.read(reinterpret_cast<char*>(&item),sizeof(item));
            }
            file.close();
    
        }
    
        if(option==3)
        {
            cout<<"Exit";
            return 0;
        }
    
        return 0;
    }
    

    这是我的输出的样子:

2 个答案:

答案 0 :(得分:1)

更改您的

equals

void AddItem(info item)

以便用户在该函数中的输入反映在实际参数中。

我也会更改该功能的名称。

答案 1 :(得分:0)

尝试将report.dat替换为repost.txt 我还要重新审核reinterpret_cast<char*>(&item), sizeof(item) 如果还没有,请打开您在程序中创建的报告文件。