首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/ add数据归档

C/ add数据归档
EN

Stack Overflow用户
提问于 2012-05-12 20:32:23
回答 1查看 199关注 0票数 0

我正在尝试使随机访问归档程序,这只是为了开始。我有关于归档addData函数不能正常工作的问题,当我查看biodata.txt时,有这么多奇怪的字符。我正在试着用结构化的方式归档。

代码语言:javascript
复制
  #include <stdio.h>
    #include <conio.h>

    struct biodata{
           int recno,age;
           char name[20],sex;
           float salary;
    }obj;


    int main(){
         void addData(void);

         void showRecord(void);
          char choice;

         while(1){



          printf("\n\n*****CHOOSE YOUR CHOICE*****\n");
          printf("1) ADD DATA\n");

          printf("2) SHOW RECORD\n");

          printf("Enter your choice : ");

          choice = getche();
          switch(choice){
             case '1' :   //call add data
                    addData();
                    break;

             case '2' :  //call show record
                    showRecord();
                    break;


          }
         }

    }


    //Adding Record to File
    void addData(){
         FILE *fp;

         fp = fopen("biodata.txt","a+t");

         printf("\n*****ADDING DATA*****\n");
         printf("\nEnter Record No : ");
         scanf("%d",&obj.recno);
         printf("Enter Name : ");

         scanf("%s",&obj.name);
         printf("Enter age : ");
         scanf("%d",&obj.age);

         printf("Enter Sex : ");
         scanf("%c",&obj.sex);
         printf("Enter Salary : ");
         scanf("%f",&obj.salary);
     fseek(fp,(obj.recno-1)*sizeof(obj),SEEK_SET);
    fwrite(&obj,sizeof(obj),1,fp);

         fclose(fp);
    }

    void showRecord(){
         FILE *fp;
         struct biodata obj;
         int rec;
         long pos;
         fp = fopen("biodata.txt","r");

         printf("\n*****SHOWING SPECIFIC RECORD*****\n");
         printf("\nEnter Record No : ");
         scanf("%d",&rec);
         pos = rec * sizeof(obj);
         fseek(fp,pos,SEEK_SET);
         if(feof(fp)==0)
        printf("\n\nNO DATA FOUND\n");
         else{
         fscanf(fp,"%d %s %d %c %f",&obj.recno,obj.name,&obj.age,&obj.sex,&obj.salary);
         printf("\n\n\tRecord No :  %d\n",obj.recno);
         printf("\tName : %s\n",obj.name);
         printf("\tAge  : %d\n",obj.age);
         printf("\tSex  : %c\n",obj.sex);
         printf("\tSalary : %f\n",obj.salary);
         }
         getch();
         fclose(fp);
    }
EN

回答 1

Stack Overflow用户

发布于 2012-05-12 21:01:41

在biodata.txt中得到奇怪字符的原因是,您在函数addData()中使用fwrite(),它执行二进制流输出,以输出您打算解释为文本的内容。您可能希望使用像fprintf()这样的东西。

更具体地说,奇怪的字符很可能是您输出的结构的intfloat类型的成员-字符串"12345"和值为12345的整数不具有相同的二进制表示,并且fscanf(fp, "%d %s %d %c %f", ...)期望前者(例如,整数12345表示为文本字符串"12345"),而addData()直接输出二进制整数,不进行转换。因此,简而言之,您需要使用fprintf()之类的函数将整数和浮点数转换为适当的文本表示形式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10563761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档