gpt4 book ai didi

c - 用C归档/添加数据

转载 作者:行者123 更新时间:2023-11-30 15:57:21 26 4
gpt4 key购买 nike

我正在尝试制作随机访问归档程序,这只是为了开始。当我查看 biodata.txt 时,我遇到了归档 addData 函数无法正常工作的问题,其中有很多奇怪的字符。我正在尝试使用结构来归档。

  #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);
}

最佳答案

您在biodata.txt中收到奇怪字符的原因是您在函数中使用了fwrite(),它执行二进制流输出>addData() 输出您想要解释为文本的内容。您可能会想使用诸如 fprintf() 之类的东西。

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

关于c - 用C归档/添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com