c++ 将结构推送到向量然后保存到输出文件的问题

如何解决c++ 将结构推送到向量然后保存到输出文件的问题

我摒弃了矢量的想法,经过一番折腾,设法将结构体放入和取出文件。我真的很享受 C++ 的挑战,有很多东西要学!!!

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

struct Account_query
{
public:
    char name[50];
    char number[50];
};

void AddRecord(Account_query* aq)
{
    ofstream fout;
    fout.open("Records.out",ios::app | ios::out | ios::binary);
    cout << "Enter name: ";
    cin >> aq->name;
    cout << "Enter account number: ";
    cin >> aq->number;
    fout.write( reinterpret_cast<const char *>( &(*aq) ),sizeof(Account_query) );
    fout.close();
}
void ShowRecord()
{
    Account_query aq;
    //std::memset(&aq,sizeof(aq));
    ifstream inf;
    inf.open("Records.out",ios::binary);
    if(!inf)
    {
        cout << "Problem opening"<<endl;
    }
    cout <<"####Data Out###"<<endl;
    while(!inf.eof())
    {
        inf.read( reinterpret_cast<char *>(&aq.name),sizeof(Account_query::name));
        inf.read( reinterpret_cast<char *>(&aq.number),sizeof(Account_query::number));
        cout << "Name is: " << aq.name << "Account is: " << aq.number <<endl;
    }
}

int main(int argc,const char * argv[]) {
    
    vector<Account_query> list;
    
    cout << "Welcome to Jizz Bank\n";
    cout << "Enter one of the following options then press enter\n";
    cout << "-----------------------------------\n";
    cout << "1) Add Record \n";
    cout << "2) Show Records \n";
    cout << "3) Search Record \n";
    cout << "4) Edit Record \n";
    cout << "5) Delete Record \n";
    cout << "-----------------------------------\n";
    cout << "Enter your choice: ";
    
    int x;
    cin >>x;
    
    Account_query a;
    Account_query *p = &a;
    
    switch(x)
    {
        case 1:{
            
            AddRecord(p);//got the data for object Now
            break;
        }
        case 2:{
            ShowRecord();
            break;
        }
        default:{
            exit(0);
        }
    }
    return 0;
}

以前的条目如下... 我正在尝试编写一个控制台程序来学习 C++。 在 switch 的情况 1 中,我正在动态创建一个结构,然后将它连同对向量的引用一起发送到一个函数。 这个想法是输入一些简单的数据来填充结构,然后将其推送到向量上,然后将其写入文件(二进制)。 问题似乎是:

fout.write(static_cast<char*> (*it),sizeof(Account_query));

我明白了,无法在 Xcode 中从类型“Account_query”转换为指针类型“char *”。 我试过 reinterpret_cast 等等,但这也不起作用。 真的很感激任何帮助, LD。

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

struct Account_query
{
public:
    char name[50];
    char number[50];
};

void AddRecord(Account_query* aq,vector<Account_query>& list)
{
    ofstream fout;
    fout.open("Records.bank",ios::binary | ios::out);
    cout << "Enter name: ";
    cin >> aq->name;
    cout << "Enter account number: ";
    cin >> aq->number;
    list.push_back(*aq);
    
    for (vector<Account_query>::iterator it=list.begin(); it != list.end(); ++it)
    {
        fout.write(static_cast<char*> (*it),sizeof(Account_query));
    }
    fout.close();
}
void ShowRecord()
{
   //Todo
   
}

int main(int argc,const char * argv[]) {
    
    vector<Account_query> list;
    
    cout << "Welcome to Jizz Bank\n";
    cout << "Enter one of the following options then press enter\n";
    cout << "-----------------------------------\n";
    cout << "1) Add Record \n";
    cout << "2) Show Records \n";
    cout << "3) Search Record \n";
    cout << "4) Edit Record \n";
    cout << "5) Delete Record \n";
    cout << "-----------------------------------\n";
    cout << "Enter your choice: ";
    
    int x;
    cin >>x;
    
    switch(x)
    {
        case 1:{
            Account_query* a = new Account_query;
            AddRecord(a,list);//got the data for object Now
            break;
        }
        case 2:{
            cout<<"do Nowt yet"<<endl;
            break;
        }
        default:{
            exit(0);
        }
    }
    return 0;
}

解决方法

不要给自己找麻烦。首先使用 std::string,然后只需使用 operator<< 将字符串放入文件中(并从中读取)。例如

#include <string>
#include <iostream>
#include <fstream>

struct AccountQuery
{
    std::string name;
    std::string number;
};

AccountQuery AddRecord()
{
    AccountQuery aq;
    std::cout << "Enter name: ";
    std::cin >> aq.name;
    std::cout << "Enter account number: ";
    std::cin >> aq.number;
    {
        std::ofstream fout("Records.out",std::ios::app | std::ios::binary);
        fout << aq.name << " " << aq.number << " "; // spaces for simple separation. 
    }
    return aq;
}
void ShowRecord()
{
    AccountQuery aq;
    std::ifstream fin("Records.out",std::ios::binary);
    if(!fin)
    {
        std::cerr << "Problem opening file.\n";
        return;
    }
    std::cout << "####Data Out###\n";
    while(fin >> aq.name && fin >> aq.number) {
        std::cout << "Name is: " << aq.name << ",Account is: " << aq.number << '\n';
    }
}

int main() {
    std::cout
       << "Welcome to Jizz Bank\n"
       << "Enter one of the following options then press enter\n"
       << "-----------------------------------\n"
       << "1) Add Record\n"
       << "2) Show Records\n"
       << "3) Search Record\n"
       << "4) Edit Record\n"
       << "5) Delete Record\n"
       << "6) Exit\n"
       << "-----------------------------------\n";
    
    bool loop = true;
    while(loop) {
        std::cout << "Enter your choice: ";
        int choice;
        std::cin >> choice;
        switch(choice)
        {
            case 1: {
                AddRecord();//return value unused?
                break;
            }
            case 2: {
                ShowRecord();
                break;
            }
            case 6: {
                loop = false;
                break;
            }
            default: {
                // nothing,could be omitted
                break;
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?