2017-03-05 37 views
-4

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

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

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

任何帮助?

#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; 
} 

这是我的输出如何看起来像:

+1

你是什么意思'我无法从文件中读取'?它显示“打开文件错误!”? –

+0

你是什么意思的“它给了垃圾价值”?这就是二进制文件中的内容看起来像... – Psi

+0

@AnthonyD。你可以参考图片附件。输出屏幕假设给我一个值是吗? –

回答

1

更改

void AddItem(info item) 

void AddItem(info& item) 

,使用户在该函数的输入,反映在实际的论点中。

我也会改变该函数的名称。

+0

我试过了,还是得到了相同的结果 –

0

尝试用repost.txt 更换report.dat我也重新审视reinterpret_cast<char*>(&item), sizeof(item) 此外,如果你没有,请打开你的程序创建的报告文件。

+0

重命名这个文件不会对代码有任何影响。该程序非常基础,在处理文件时不会考​​虑文件扩展名。 – rlam12