a********n 发帖数: 648 | 1 下面这个简单程序,我创建一个文件并在里面存了8个数,10,20,...,80,然后需要从
第三个数起读2个数,应该是30,40。但是读出来却是7680,10240,不知道是不是
seekg()这个函数没有用对,折腾了很久,还是不对,不知道哪位大牛可以帮着看看。
谢谢了先。
int main()
{
int i, k;
//Create a file
fstream OUTPUT( "RESULT.dat", ios::out | ios::in );
if( !OUTPUT )
{
cerr << "File could not be opened." << endl;
exit( 1 );
}
//Input the data
for( i=1; i<=8; i++ )
{
k = i*10;
cout << " k = " << k << endl;
OUTPUT.write( reinterpret_cast | p***o 发帖数: 1252 | 2 ios::binary?
【在 a********n 的大作中提到】 : 下面这个简单程序,我创建一个文件并在里面存了8个数,10,20,...,80,然后需要从 : 第三个数起读2个数,应该是30,40。但是读出来却是7680,10240,不知道是不是 : seekg()这个函数没有用对,折腾了很久,还是不对,不知道哪位大牛可以帮着看看。 : 谢谢了先。 : int main() : { : int i, k; : //Create a file : fstream OUTPUT( "RESULT.dat", ios::out | ios::in ); : if( !OUTPUT )
| z****e 发帖数: 2024 | 3 int i, k;
//Create a file
ofstream OUTPUT( "RESULT.dat"); //ios::out | ios::in );
if( !OUTPUT ){
cerr << "File could not be opened." << endl;
exit( 1 );
}
//Input the data
for( i=1; i<=8; i++ ){
k = i*10;
cout << " k = " << k << endl;
OUTPUT.write( reinterpret_cast( &k ), sizeof(int) );
}
OUTPUT.close();
cout << endl << "Start Output" << endl;
ifstream INPUT("RESULT.dat");
INPUT.seekg( 2*sizeo
【在 a********n 的大作中提到】 : 下面这个简单程序,我创建一个文件并在里面存了8个数,10,20,...,80,然后需要从 : 第三个数起读2个数,应该是30,40。但是读出来却是7680,10240,不知道是不是 : seekg()这个函数没有用对,折腾了很久,还是不对,不知道哪位大牛可以帮着看看。 : 谢谢了先。 : int main() : { : int i, k; : //Create a file : fstream OUTPUT( "RESULT.dat", ios::out | ios::in ); : if( !OUTPUT )
| z****e 发帖数: 2024 | 4 个人感觉,你同时读写一个流,会有问题。
个人的感觉,不一定对,希望大侠来指点。
还有一个常见错误,就是你那个 RESULT.dat 其实没有被update。里面可能已经乱了。 | a********n 发帖数: 648 | 5 分开的也试过了,也是不行,很奇怪
还有就是如果写入的是1,2,....,8, 或者100,200,...,800,都没有问题,单单就是10,20,...80有问题。
【在 z****e 的大作中提到】 : 个人感觉,你同时读写一个流,会有问题。 : 个人的感觉,不一定对,希望大侠来指点。 : 还有一个常见错误,就是你那个 RESULT.dat 其实没有被update。里面可能已经乱了。
| K*****n 发帖数: 65 | 6 Solution One:
1) Replace
fstream OUTPUT( "RESULT.dat", ios::out | ios::in );
with
fstream OUTPUT( "RESULT.dat", ios::trunc| ios::out | ios::in );
2) Replace
OUTPUT.seekg( 2*sizeof(int), ios::beg );
with
OUTPUT.seekg( 1 + 2*sizeof(int), ios::beg );
Solution Two:
Replace
fstream OUTPUT( "RESULT.dat", ios::out | ios::in );
with
fstream OUTPUT( "RESULT.dat", ios::binary | ios::trunc| ios::out | ios::in ); | a********n 发帖数: 648 | 7 我发现你说的是对的,现在可以了,非常感谢。
【在 p***o 的大作中提到】 : ios::binary?
| a********n 发帖数: 648 | 8 谢谢,加上binary就可以了。我看c++的书上也没有说必须要指定binary
也感谢上面各位帮我看程序。
【在 K*****n 的大作中提到】 : Solution One: : 1) Replace : fstream OUTPUT( "RESULT.dat", ios::out | ios::in ); : with : fstream OUTPUT( "RESULT.dat", ios::trunc| ios::out | ios::in ); : 2) Replace : OUTPUT.seekg( 2*sizeof(int), ios::beg ); : with : OUTPUT.seekg( 1 + 2*sizeof(int), ios::beg ); : Solution Two:
|
|