Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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++二进制文件添加记录,查找和替换 我正在使用Turbo C++ 3.5中的二进制文件,我想创建一个库程序。我想在二进制文件中添加有关书籍的信息,并执行诸如搜索和替换、删除记录等功能_C - Fatal编程技术网

C++二进制文件添加记录,查找和替换 我正在使用Turbo C++ 3.5中的二进制文件,我想创建一个库程序。我想在二进制文件中添加有关书籍的信息,并执行诸如搜索和替换、删除记录等功能

C++二进制文件添加记录,查找和替换 我正在使用Turbo C++ 3.5中的二进制文件,我想创建一个库程序。我想在二进制文件中添加有关书籍的信息,并执行诸如搜索和替换、删除记录等功能,c,C,我做这个功能,但我有两个问题:1。例如,当我向文件中添加6条关于书籍的记录时,BooksReport功能无法显示所有记录,例如,仅显示4条或5条记录;当我搜索记录时,从5条记录中,例如,我仅找到3条或2条记录。2.当我搜索并替换文件中的某个单词时,此编辑记录之前的所有记录都将被删除 #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> void

我做这个功能,但我有两个问题:1。例如,当我向文件中添加6条关于书籍的记录时,BooksReport功能无法显示所有记录,例如,仅显示4条或5条记录;当我搜索记录时,从5条记录中,例如,我仅找到3条或2条记录。2.当我搜索并替换文件中的某个单词时,此编辑记录之前的所有记录都将被删除

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void add();
void search();

struct { 
    char name[20]; 
    char id[2]; 
    char publisher[20];} books, listbooks[100]; 

void main(){
    add();
    // search();
    getch();
}

//Add
void add(){
    FILE *pt;
    pt=fopen("books.dat","a");
    clrscr();
    printf("\t Please Enter Data for new book");
    printf("\n Please enter Name:");
    scanf("%s", &books.name );
    printf("Please enter ID:");
    scanf("%s", &books.id );
    printf("Please enter Publisher:");
    scanf("%s", &books.publisher);

    fwrite(&books, sizeof(books), 1,pt);
    fclose(pt);
}
void search(){
//Search and replace 
    pt=fopen("books.dat","w+"); 
    char replaceName[20]; 
    char searchName[20]; 
    rewind(pt); 
    found=0; 
    printf("Please enter search word \n"); 
    scanf("%s", &searchName); 
    printf("Please enter replace word \n"); 
    scanf("%s", &replaceName); 
    i=0; 
    do{ 
        i++; 
        fread(&books, sizeof(books), i,pt); 
        if(strcmp(searchName,books.name)==0){ 
            found=1; 
            strcpy(books.name,replaceName); 
            fwrite(&books, sizeof(books), i,pt); 
            break;} 
    }while(!feof(pt)); 

    clrscr(); 
    if(found==1){ 
        printf("Replace successful!"); 
    } 
    if(found==0){ 
        printf("Not Found"); 
    } 
    fclose(pt);
}

用fread阅读一本书后,文件指针已经指向下一本书,只调用fwrite来更新它是不正确的

在fread和fwrite之间切换之前,您必须使用fseek

要知道要查找的位置,可以使用index*sizeofbooks


此外,您的文件应使用二进制模式标志b打开,否则在写入可能包含未初始化部分中的字符的二进制数据时会出现问题。

您想知道为什么没有人应答吗?因为你使用的是22年前的编译器,非标准代码,没有缩进,还有……请帮帮我。我是学生,应该使用Turbo C++。我的代码中有什么问题?如果你想使用适当的C++,在不使用新软件的情况下,很可能不可能帮助你。G++/MinGW和其他软件是最新的、免费的。关于你的代码问题:A看起来你想做一个C程序,而不是C++。b圆锥曲线h c不完整无主,无功能头。。。d、 ……不!我的代码在Turbo C++上成功运行,我只有2个bug,我想解决它。我正在编辑顶级代码并添加主功能。请帮帮我,这篇文章毫无疑问。你的代码不会神奇地自我修复,你知道吗?!