C - 为什么字符串格式化程序 %d 的结果是文件上的字符值,scanf( "%d" ,&s_ptr[i])


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

相关内容

  • 没有找到相关文章

最新更新