fprintf输出到文件里时,会以显示ASCII码形式写入

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<math.h>
#define LEN sizeof(struct STU)


char *p_in="%s%s%s%d%d%d%d%d";
char *p_out="%-15s%-8s%-12s%-12d%-12d%-12d%-12d%-12d%-12d\n";


struct STU
{
	char id[15];
	char name[10];
	char zhuanye[20];
	int sc_1;
	int sc_2;
	int sc_3;
	int sc_4;
	int sc_5;
};
struct STU stu[200];


void in()
{
	int m=0,i,cho;
	FILE *fp;
	m=input("stu.txt",stu);
	printf("%d\n",m);
	if(m==0)
  	{
	  	printf("\t \t文件中没有记录!\n");
	}
	else
	{
		p_int(stu,m);
	}
	if((fp=fopen("stu.txt","ab+"))==NULL)
  	{
	  	printf("文件不存在!\n");
	  	return;
 	 }

	printf("\t \t是否输入学生信息\n");
	printf("\t \t确认选1\n\t \t不确认选2\n");
	scanf("%d",&cho);

	while(cho==1)
	{
		printf("\t \t********************\n");
		printf("\t \t请输入学生学号:");
		scanf("%d",&stu[m].id );
		for(i=0;i<m;i++)
		{
	    		if(stu[i].id==stu[m].id)
	    		{
	   				printf("该学号已经存在了,按任意键继续!");
					fclose(fp);
	    			return;
	    		}
				printf("\t \t请输入学生姓名:");
				scanf("%s",stu[m].name );		/*输入学生姓名*/
				printf("\t \t请输入学生专业:");
				scanf("%s",stu[m].zhuanye );	/*输入学生专业*/
				printf("\t \t请输入学生C语言成绩:");
				scanf("%d",&stu[m].sc_1);		/*输入学生姓名*/
				printf("\t \t请输入学生计算物理学成绩:");
				scanf("%d",&stu[m].sc_2);		/*输入学生姓名*/
				printf("\t \t请输入学生大学物理成绩:");
				scanf("%d",&stu[m].sc_3);		/*输入学生姓名*/
				printf("\t \t请输入学生原子物理成绩:");
				scanf("%d",&stu[m].sc_4);		/*输入学生姓名*/
				printf("\t \t请输入学生光学成绩:");
				scanf("%d",&stu[m].sc_5);		/*输入学生姓名*/
			//	int id;
		//		id=(int);
				fprintf(fp,"\n%-15s%-8s%-12s%-12d%-12d%-12d%-12d%-12d",stu[m].id,stu[m].name ,stu[m].zhuanye ,
					stu[m].sc_1,stu[m].sc_2,stu[m].sc_3,stu[m].sc_4,stu[m].sc_5 );
				break;
		}
		printf("\t \t是否继续?\n");
		printf("\t \t是选1,否选2\n");
		printf("***************************\n");
		printf("\t \t");
		scanf("%s",&cho);
	}
	fclose(fp);
}

部分代码

 

fopen里用ab+,二进制读和追加

你的id是char型的,但是输入的时候用的%d整数型,这样在写入文件时就转变成char了