gpt4 book ai didi

c++ - 在找到总计并将其插入C++文件中的同时获取垃圾值

转载 作者:行者123 更新时间:2023-12-01 14:52:37 25 4
gpt4 key购买 nike

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

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

我尝试将m1,m2,m3,m4,m5转换为整数并将其转换回字符,以便可以将它们复制到缓冲区中并插入文件中。
有人可以告诉我我在做什么错。

#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<string.h>
#include<process.h>
#include<stdlib.h>
#include<stdio.h>
#define SIZE 55
char buffer[SIZE + 1];
class report
{
public:
int a, b, c, d, e, s, avg;
char rollno[100];
char name[100];
char m1[10];
char m2[10];
char m3[10];
char m4[10];
char m5[10];
char grade[10];
char average;
char total[100];
void pack();
void unpack();
void getdata();
void putdata();
void insert();
void create();
void sort();
void search();
void update();
void display();
void failures();
void modify(char *key);
void search(char *key);

};

void report::getdata()
{

cout << "ENTER THE ROLL NO OF THE STUDENT:\t";
cin >> rollno;
cout << "ENTER THE NAME OF THE STUDENT:\t";
cin >> name;
cout << "ENTER THE MARKS OF THE FOLLOWING SUBJECTS OUT OF 100\n";
cout << "OPERATION RESEARCH:\t";
cin >> m1[0];
cout << "CRYPTOGRAPHY:\t";
cin >> m2[0];
cout << "OPERATING SYSTEMS:\t";
cin >> m3[0];
cout << "FILE STRUCTURE:\t";
cin >> m4[0];
cout << "SOFTWARE TESTING:\t";
cin >> 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;
total[0] = s + '0';

}

void report::putdata()
{
cout << rollno << "\t" << name << "\t" << m1 << "\t" << m2 << "\t" << m3
<< "\t" << m4 << "\t" << m5 << "\t" << total << endl;

}
void report::pack()
{
strcpy(buffer, rollno);
strcat(buffer, "|");
strcat(buffer, name);
strcat(buffer, "|");
strcat(buffer, m1);
strcat(buffer, "|");
strcat(buffer, m2);
strcat(buffer, "|");
strcat(buffer, m3);
strcat(buffer, "|");
strcat(buffer, m4);
strcat(buffer, "|");
strcat(buffer, m5);
strcat(buffer, "|");
strcat(buffer, total);
strcat(buffer, "|");
strcat(buffer, "\n");
}
void report::unpack()
{
char *p;
p = strtok(buffer, "|");
strcpy(rollno, p);
p = strtok(NULL, "|");
strcpy(name, p);
p = strtok(NULL, "|");
strcpy(m1, p);
p = strtok(NULL, "|");
strcpy(m2, p);
p = strtok(NULL, "| ");
strcpy(m3, p);
p = strtok(NULL, "|");
strcpy(m4, p);
p = strtok(NULL, "|");
strcpy(m5, p);
p = strtok(NULL, "|");
strcpy(total, p);

}

void report::insert()
{
getdata();
pack();
ofstream fout("test.txt", ios::app);
fout << buffer;
fout.close();
}
void report::display()
{
ifstream fin("test.txt");
while (!fin.eof())
{
fin.getline(buffer, SIZE + 1, '\n');
if (fin.fail())
break;
unpack();
putdata();
}
fin.close();
}
void report::search(char *key)
{
ifstream fin("test.txt");
int count = 0;
while (!fin.eof())
{
fin.getline(buffer, SIZE + 1, '\n');
if (fin.fail())
break;
unpack();
if (strcmp(rollno, key) == 0)
{
putdata();
count++;
}
}
cout << "TOTAL RECORDS FOUND:" << count << endl;
fin.close();
}
void report::modify(char *key)
{
ifstream fin("test.txt");
ofstream fout("temp.txt");
int count = 0;
while (!fin.eof())
{
fin.getline(buffer, SIZE + 1, '\n');
if (fin.fail())
break;
unpack();
if (strcmp(rollno, key) == 0)
{
getdata();
count++;
}
pack();
fout << buffer;
}
if (count == 0)
cout << "ROLL NO NOT FOUND!!" << endl;
else
cout << "MODIFIED!!" << endl;
fin.close();
fout.close();
remove("test.txt");
rename("temp.txt", "test.txt");
}

int main()
{
int choice;
int n;
report r;
char key[20];
clrscr();

while (1)
{

cout << "--------------------\n" << endl;
cout << "1.MAKE REPORT CARD\n" << "2.UPDATE DETAILS\n"
<< "3.SORT NAMES\n" << "4.SEARCH A NAME\n" << "5.UPDATE GRADE\n"
<< "6.VIEW REPORT CARD\n" << "7.LIST OF FAILURES\n" << "8.EXIT"
<< endl;
cout << "\n--------------------\n\n" << endl;
cout << "ENTER YOUR CHOICE:\t" << endl;
cin >> choice;

switch (choice)
{
case 1:
r.insert();

cout << "VALUES INSERTED\n" << endl;
break;

case 2:
cout << "ENTER THE ROLL NO TO MODIFY:\t" << endl;
cin >> key;
r.modify(key);
break;

case 3:
cout << "example 3" << endl;
break;

case 4:
cout << "ENTER THE ROLL NO:\t" << endl;
cin >> key;
r.search(key);

break;

case 5:
cout << "example 5" << endl;
break;

case 6:
cout << "REPORT CARD DETAILS\n" << endl;
r.display();
break;

case 7:
cout << "example 7" << endl;
break;

case 8:
exit(0);
break;
default:
return 0;
}
}
}

最佳答案

解决问题的最佳方法是使用二进制文件存储数据。
首先,删除pack()unpack()方法。我们不需要那些。

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

关于c++ - 在找到总计并将其插入C++文件中的同时获取垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62104706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com