- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个程序应该创建一个名为 Record.bin 的二进制文件,然后将用户输入的所有信息写入该文件。现在它到达了它在 Student B[10] 中读取的部分,并且它正确读取了 B[0],但是 B[] 的所有以下元素都差了一步。当值为整数时,我无法弄清楚如何包含定界符。
之后我的搜索出现了一些问题,但我似乎无法理解为什么。
#include <iostream>
#include <cstring>
#include <sstream>
#include <istream>
#include <fstream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
struct Student
{
char Name[20];
char ANumber[9];
int Age;
float GPA;
};
int main(){
Student A[10];
Student B[10];
for (int i = 0; i < 10; i++){
cout << "Enter student's name" << endl;
cin >> A[i].Name;
cout << "Enter ANumber" << endl;
cin >> A[i].ANumber;
cout << "Enter Age" << endl;
cin >> A[i].Age;
cout << "Enter GPA" << endl;
cin >> A[i].GPA;
}
fstream fout("Record.bin", ios::out | ios::binary);
for (int i = 0; i < 10; i++){
fout << A[i].Name << endl;
fout << A[i].ANumber << endl;
fout << A[i].Age << endl;
fout << A[i].GPA << endl;
}
fout.close();
fstream fin("Record.bin", ios::in);
char tempe[50];
for (int i = 0; i < 10; i++){
fin.getline(B[i].Name, 25, '\n');
fin.getline(B[i].ANumber, 25, '\n');
fin.getline((char*)&B[i].Age, 25, '\n');
fin.getline((char*)&B[i].GPA, 25, '\n');
}
fin.close();
fin.open("Record.bin", ios::in);
Student C;
char*temp2 = "";
fin.seekg(4 * sizeof(Student), ios::beg);
fin.read((char*)&C.Name, sizeof(C.Name));
fin.read((char*)&C.ANumber, sizeof(C.ANumber));
fin.read((char*)&C.Age, sizeof(C.Age));
fin.read((char*)&C.GPA, sizeof(C.GPA));
fin.close();
fin.open("Record.bin", ios::in | ios::out | ios::binary);
fin.seekp(4 * sizeof(Student), ios::end);
fin.write(C.Name, sizeof(C.Name));
fin.write(C.ANumber, sizeof(C.ANumber));
fin << C.Age;
fin << C.GPA;
fin.close();
}
最佳答案
您似乎混合了二进制文件和格式化文本输出。如果您有二进制文件,为什么不使用未格式化的二进制 read
和 write
调用?如果您使用格式化输出,则写入整数“1”的大小与整数“10”的大小不同。但是在未格式化的二进制文件中都使用 4 个字节(可能是 4 个字节)。
C++ iostream 有一个“g”(获取)和“p”(放置)位置。您需要使用正确的搜索功能。
如果您正在阅读,则需要使用 seekg
。如果您要写作,那么您需要 seekp
。
我很确定您至少在一个地方使用了错误的搜索功能。
关于c++ - IO 二进制写入使用 Seekp;下线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28755288/
我在查询获取成员(member)的所有下线时遇到问题。这是我的表格截图: 在本例中,M1508004、M1508005 和 M1508006 是 M1508003 的下线。 M1508007 是 M1
这个程序应该创建一个名为 Record.bin 的二进制文件,然后将用户输入的所有信息写入该文件。现在它到达了它在 Student B[10] 中读取的部分,并且它正确读取了 B[0],但是 B[]
我们正在编写有关离线第一个应用程序基础知识的教程,并使用带有 Tape 的 JSDOM 来测试我们的代码。在我们的代码中,我们通过将事件监听器附加到窗口并监听“在线”/“离线”事件和 来更新 DOM,
我是一名优秀的程序员,十分优秀!