Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;fstream写入不';t在没有seekg和seekp的情况下使用二进制文件_C++_File_Fstream - Fatal编程技术网

C++ c++;fstream写入不';t在没有seekg和seekp的情况下使用二进制文件

C++ c++;fstream写入不';t在没有seekg和seekp的情况下使用二进制文件,c++,file,fstream,C++,File,Fstream,我需要按顺序读写同一个文件(没有seekg和seekp) 但出于某种原因,写作是行不通的 这是我的班级 class student { int id ; char name[20] ; int m1 , m2 , m3 ; public: student() { } student(int idd , char*n , int mm1 , int mm2 , int mm3 ) { id = idd ;

我需要按顺序读写同一个文件(没有seekg和seekp) 但出于某种原因,写作是行不通的

这是我的班级

class student
{
    int id ; 
    char name[20]  ;
    int m1 , m2 , m3 ; 
public:
    student()
    {
    }
    student(int idd , char*n , int mm1 , int mm2 , int mm3 )
    {
        id = idd ; 
        strcpy(name , n); 
        m1 = mm1 ; 
        m2 = mm2 ; 
        m3 = mm3 ; 
    }
    void show()
    {
        cout<<"student id : "<<id<<endl<<"student name : "<<name<<endl<<"mark 1 : "<<m1<<endl<<"mrak 2 : "<<m2<<endl<<"mark 3 : "<<m3<<endl ;
    }
    void get()
    {
        cout<<"enter student id : " ; 
        cin>>id ; 
        cout<<"enter student name : " ; 
        cin.ignore() ; 
        cin.get(name , 20) ; 
        cout<<"enter student's mark 1 :" ; 
        cin>>m1 ; 
        cout<<"enter student's mark 2 :" ; 
        cin>>m2 ; 
        cout<<"enter student's mark 3 :" ; 
        cin>>m3 ; 


    }


};
班级学生
{
int-id;
字符名[20];
int m1,m2,m3;
公众:
学生()
{
}
学生(整数idd,字符*n,整数mm1,整数mm2,整数mm3)
{
id=idd;
strcpy(名称,n);
m1=mm1;
m2=mm2;
m3=mm3;
}
无效显示()
{

cout问题在于,双向文件流都包含一个联合缓冲区,其中输入和输出都会影响下一个要读写的字符。例如,读取完成后,输出位置指示器也会随着读取的字符数而增加

修改
功能中,您可以在执行
读取
后直接执行
写入
,而无需将输出位置指示器设置回0。为了获得预期结果,应始终执行此操作


输入后的输出也是如此:不要忘了设置
seekg
位置指示器。

我在visual studio 2010中编译,当我在其他IDE(如代码块)上编译相同的代码时,它运行良好并输出预期结果,我认为这是.Net问题或其他问题!

什么说明Illy不起作用?你能详细说明一下代码应该做什么,到目前为止你尝试了什么,等等吗?@templatetypedef好的,当我试图修改文件中的任何记录时,modify函数中的.write函数不起作用,它根本不起作用,它保留了旧值不同的编译器可以使用不同的bidirec实现我认为这不是一个错误。
   int main()
{
       fstream file("f://records.dat" , ios::out | ios::in  |ios::binary ) ; 
    if(!file)
    {
        cout<<"Error !";
        int z ; 
        cin>>z ;
        return 4 ; 

    }


    modify(file);

    int x ; 
    cin>>x ; 
    return 0 ; 
}
void modify(fstream &file)
{   
    int recnum  ;
    cout<<"enter the number of the record to be modified : " ; 
    cin>>recnum ;
    file.seekg(0) ; 
    file.seekp(0);
    student s1 ;
    for(int i = 0 ; i<recnum-1 ; i++) 
    {
        file.read((char *) &s1 , sizeof(s1)) ;  
    }
int x = file.tellp() ;
    int y = file.tellg() ; 
    cout<<x<<endl<<y<<endl ;   
student s2 ;
s2.get() ; 
    file.write((char *) &s2 , sizeof(student))
    x = file.tellp() ;
    y = file.tellg() ;
    cout<<x<<endl<<y<<endl ;   

    file.flush() ; 
        file.seekg(0 , ios::beg);
    if(file.eof())
    {
        cout<<"error !" ; 
        int x ; 
        cin>>x ; 
    }

        while(file.read((char *) &s1 , sizeof(student)))
    {
        s1.show() ; 
    }
}