2017-03-05 3 views
-4

Mon code est en cours d'exécution mais il ne peut pas lire la sortie du fichier binaire que j'ai entré. Cela a donné une valeur de déchet. Le programme est conçu pour permettre à un utilisateur de choisir une option.Impossible de lire le fichier binaire en C++

  1. Pour ajouter un élément et l'écrire dans un fichier binaire.

  2. Afficher une sortie du fichier binaire qui a été lu.

Une aide?

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

Voici comment ma sortie ressemble:

+1

Que voulez-vous dire par «je ne peux pas lire dans le fichier»? Est-ce qu'il affiche 'Erreur lors de l'ouverture du fichier!'? –

+0

Que voulez-vous dire par "il a donné une valeur de déchets"? Voilà à quoi ressemble le contenu des fichiers binaires ... – Psi

+0

@AnthonyD. vous pouvez vous référer à l'image ci-jointe. l'écran de sortie suppose de donner une valeur est-il? –

Répondre

1

Changer votre

void AddItem(info item) 

à

void AddItem(info& item) 

de telle sorte que l'entrée de l'utilisateur dans cette fonction, se reflète dans l'argument réel.

Je changerais aussi le nom de cette fonction.

+0

ive essayé, toujours le même résultat –

0

Essayez de remplacer report.dat avec repost.txt Je réexaminera également reinterpret_cast<char*>(&item), sizeof(item) Aussi, si vous n'avez pas, ouvrez le fichier de rapport que vous avez créé dans le programme.

+0

Renommer le fichier n'aura aucun effet sur le code. Le programme est tellement basique qu'il ne tient pas compte de l'extension de fichier lors du traitement. – rlam12