C++ 在查找总数并将其插入C+中的文件时获取垃圾值+;

C++ 在查找总数并将其插入C+中的文件时获取垃圾值+;,c++,turbo-c++,C++,Turbo C++,在void report::getdata()函数中查找总数时,会将随机字符或值插入到文件中 数据被读入字符数组,因为它们可以插入缓冲区 我试着将m1、m2、m3、m4、m5转换成整数,然后将它们转换回字符,这样就可以将它们复制到缓冲区并插入到文件中。 有人能告诉我我做错了什么吗 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义尺寸55 字符缓冲区[大小+1]; 课堂报告 { 公众: INTA、b、c、d、e、s、平均值; char-rollno[100]; 字符名[100]; c

在void report::getdata()函数中查找总数时,会将随机字符或值插入到文件中

数据被读入字符数组,因为它们可以插入缓冲区

我试着将m1、m2、m3、m4、m5转换成整数,然后将它们转换回字符,这样就可以将它们复制到缓冲区并插入到文件中。 有人能告诉我我做错了什么吗

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义尺寸55
字符缓冲区[大小+1];
课堂报告
{
公众:
INTA、b、c、d、e、s、平均值;
char-rollno[100];
字符名[100];
char m1[10];
charm2[10];
煤焦m3[10];
charm4[10];
charm5[10];
炭级[10];
平均字符数;
字符总数[100];
空包();
无效解包();
void getdata();
void putdata();
无效插入();
void create();
无效排序();
无效搜索();
无效更新();
void display();
无效失败();
无效修改(字符*键);
无效搜索(字符*键);
};
无效报告::getdata()
{
cout>rollno;
姓名;
coutm1[0];
cout>m2[0];
cout>m3[0];
cout>m4[0];
cout>m5[0];
a=m1[0]-“0”;
b=m2[0]-“0”;
c=m3[0]-“0”;
d=m4[0]-“0”;
e=m5[0]-“0”;
s=a+b+c+d+e;
总计[0]=s+'0';
}
无效报告::putdata()
{

cout解决问题的最佳方法是使用二进制文件存储数据

首先,删除
pack()
unpack()
方法。我们不需要这些方法

void report::insert()
{
    r.getdata();
    ofstream fout("test.dat", ios::app|ios::binary);
    fout.write((char*)&r,sizeof(r));
    fout.close();
}


你真的应该养成总是初始化所有变量的习惯。你能告诉我我哪里出错了吗?如果你想将带有数字的字符串转换成整数值,然后从第一个数组元素中减去“0”就不行了。你需要使用
std::stoi
(C++11)或旧的
atoi
,尽管它不是一个安全的函数。不清楚您打算用
cin>>m1[0]做什么例如,这是一个不幸的例子。使用30年的工具链很难得到好的帮助。C++和Turbo C++不是同一回事,所以你会得到很多建议的不适用,很少有人能完全帮助你因为不熟悉方言。你的首要职责是通过任何课程要求。OU使用Turbo C++,但我强烈建议您自己在现代C++ C++中实现更流畅的过渡,建议:Turbo C++与Turbo Debugger一起出现,这是一个最好的调试器之一,它在30年后仍然保持良好。g,然后一步一步地看代码发生了什么。当你看到意想不到的事情发生时,很有可能你只是发现了一个bug。Turbo Debugger还可以让你后退一步,看看事情发生后你是如何取得进展的。Debugger是最好的程序员生产力工具之一,使用它会让你大吃一惊你班上其他同学的d。
void report::search(char *key)
{
    ifstream fin("test.dat",ios::binary);
    int count = 0;
    while (!fin.eof())
    {
        fin.read((char*)&r,sizeof(r));        
        if (fin.fail())
            break;
        if (strcmp(r.rollno, key) == 0)
        {
            r.putdata();
            count++;
        }
    }
    cout << "TOTAL RECORDS FOUND:" << count << endl;
    fin.close();
}
void report::display()
{
    ifstream fin("test.dat",ios::binary);
    while (!fin.eof())
    {
        fin.read((char*)&r,sizeof(r));
        if (fin.fail())
            break;
        r.putdata();
    }
    fin.close();
}