在这个输出中 7 是正确答案而不是 6
How 7 is the right answer and not 6 in this output
假设文件SCHOOLS.DAT被创建
在 class SCHOOLS 对象的帮助下,定义如下:
class 学校
class SCHOOLS
{
int SCode; // School Code
char SName[20]; // School Name
int NOT; // Number of Teachers in the school
public:
void Display()
{cout<<SCode<<"#"<<SName<<"#"<<NOT<<endl;}
int RNOT(){return NOT;}
};
问题
考虑到二进制文件,查找以下 C++ 代码的输出
SCHOOLS.DAT硬盘上存在以下10所学校的记录
class SCHOOLS 如前所述。
SCode SName NOT
1001 脑力学校 100
1003儿童生活学校115
1002 关爱共享学校 300
1006 终身教育学校 50
1005 大师 Shishya Sadan 195
1004圣教学校140
1010 Rahmat E Talim 学校 95
1008创新Excel学校300
1011 卓越教育学校 200
1012 提升思想学校 100
void main()
{
fstream SFIN;
SFIN.open("SCHOOLS.DAT",ios::binary|ios::in);
SCHOOLS S;
SFIN.seekg(5*sizeof(S));
SFIN.read((char*)&S, sizeof(S));
S.Display();
cout<<"Record :"<<SFIN.tellg()/sizeof(S) + 1<<endl;
SFIN.close();
}
输出
1004#圣力教育学校#140
记录:7
我的问题记录怎么是7而不是6。
我的方法是 S 的值为 24 。添加2个字节的int Scode,2个字节的int NOT,20个字节的char SName [20]后得到它。
所以 sizeof(S) 的值将是 24,SFIN.tellg 的值将是 120 除以它们将得到 5,然后我们必须加 1。所以它是 6,对吗?
你甚至不需要考虑sizeof(S)
的实际价值;就把它当作一个常量K.
您最初寻找到位置 5*K。然后你从文件中读取 K 个字节,将你留在 6*K 的位置。这意味着表达式 SFIN.tellg()/sizeof(S) + 1
等价于 6*K/K + 1。对于任何 K,K/K 等于 1,因此进一步简化为 6*1 + 1,等于 7。
假设文件SCHOOLS.DAT被创建 在 class SCHOOLS 对象的帮助下,定义如下: class 学校
class SCHOOLS
{
int SCode; // School Code
char SName[20]; // School Name
int NOT; // Number of Teachers in the school
public:
void Display()
{cout<<SCode<<"#"<<SName<<"#"<<NOT<<endl;}
int RNOT(){return NOT;}
};
问题 考虑到二进制文件,查找以下 C++ 代码的输出 SCHOOLS.DAT硬盘上存在以下10所学校的记录 class SCHOOLS 如前所述。
SCode SName NOT
1001 脑力学校 100
1003儿童生活学校115
1002 关爱共享学校 300
1006 终身教育学校 50
1005 大师 Shishya Sadan 195
1004圣教学校140
1010 Rahmat E Talim 学校 95
1008创新Excel学校300
1011 卓越教育学校 200
1012 提升思想学校 100
void main()
{
fstream SFIN;
SFIN.open("SCHOOLS.DAT",ios::binary|ios::in);
SCHOOLS S;
SFIN.seekg(5*sizeof(S));
SFIN.read((char*)&S, sizeof(S));
S.Display();
cout<<"Record :"<<SFIN.tellg()/sizeof(S) + 1<<endl;
SFIN.close();
}
输出 1004#圣力教育学校#140 记录:7
我的问题记录怎么是7而不是6。
我的方法是 S 的值为 24 。添加2个字节的int Scode,2个字节的int NOT,20个字节的char SName [20]后得到它。
所以 sizeof(S) 的值将是 24,SFIN.tellg 的值将是 120 除以它们将得到 5,然后我们必须加 1。所以它是 6,对吗?
你甚至不需要考虑sizeof(S)
的实际价值;就把它当作一个常量K.
您最初寻找到位置 5*K。然后你从文件中读取 K 个字节,将你留在 6*K 的位置。这意味着表达式 SFIN.tellg()/sizeof(S) + 1
等价于 6*K/K + 1。对于任何 K,K/K 等于 1,因此进一步简化为 6*1 + 1,等于 7。