typedef struct info{ //main record
int *id;
unsigned char *name;
}student;
void create(){
student *s_ptr;
int num_of_student,i;
FILE *f_ptr;
f_ptr = fopen("studentdata.txt","w");
printf("**How many student to record**n");
printf("Enter:");
scanf("%d",&num_of_student);
s_ptr = (student*)calloc(num_of_student,sizeof(student));
for(i=0;i<num_of_student;i++){
printf("Enter student id: ");
scanf("%d",&s_ptr[i]);//while string format is %d it prints char value to the file.
fflush(stdin);
printf("Enter student full name: ");
scanf("%[^n]",&(s_ptr+i)->name);
fwrite(s_ptr+i,sizeof(struct info),1,f_ptr);
}
}
scanf("**%d**",&s_ptr[i])
在文件中打印其相对字符值,但将字符串格式从%d
更改为%s
后,打印实际的int值。为什么?
为什么字符串格式化程序%d的结果是文件上的字符值,scanf("%d",&s_ptr[i]).
scanf
与数据如何写入文件无关。
fwrite
将数据写入文件,并且写入数据与计算机内存中存在的数据完全相同。
int
以数字的二进制形式存在,精确值(通常为4或8字节长)。
如果您让fwrite
将这些字节存储在一个文件中,然后将它们作为文本查看,您将看到一些字符,但不是表示数字的十进制数字的字符。
这是因为您的文本编辑器无法知道这些字节属于C语言int
类型,需要重新解释才能查看。
如果您希望这些字节以人类可读的形式打印到文件中,请使用fprintf
。