Ferry. 2019-01-15 19:29 采纳率: 28.6%
浏览 531
已采纳

为什么相应的文本文件里现实的内容和自己输入进去的内容不一致

#include "stdio.h"
#include "stdlib.h"
typedef struct student
{
long unsigned id; //学号
char name[20]; //姓名
int old; //年龄
char sex; //性别
int born; //出生年月
char address[100]; //地址
double phone; //电话
char Email[100]; //Email
}student;
int main()
{
student s;
FILE * fp;
char ch;
char num[80]; //最长字符串为80
fp=fopen("xueshengxinxi.txt","w");
if(!fp)
{
printf("file cannot be opened");
exit(1);
}
printf("Enter records:\n");
while(1)
{
printf("id: ");
gets(num);
s.id=atol(num); //atol将数字串转化为长整型
printf("name: ");
gets(s.name);
printf("old: ");
scanf("%d",&s.old);
printf("sex: ");
scanf("%s",&s.sex);
printf("born: ");
scanf("%ld",&s.born);
printf("address: ");
scanf("%s",&s.address);
printf("phone: ");
scanf("%ld",&s.phone);

printf("Email: ");
scanf("%s",&s.Email);
fwrite(&s,sizeof(s),1,fp); //将当前读取的记录s写入文件
printf("another(y/n)?"); //输入y或n,y表示继续输入,n表示停止
scanf("%c",&ch);
ch=getchar();
if(ch=='n')
break;
gets(num); //清空输入缓冲区
}
fclose(fp);
return 0;
}

例如:Enter records:
id: 1001
name: li
old: 11
sex: nan
born: 1234567
address: wuhan
phone: 1234567
Email: 972686460@qq.com
another(y/n)?n

在文件“xueshengguanli.txt”中,得到的却是:
? li 烫烫烫...... 之类的,数字为什么无法显示?
求大神讲解

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-01-16 00:41
    关注

    你是直接以二进制方式而不是ascii的方式输出的数字,当然是乱码
    这是正常的。要输出文本形式的数字,你需要用 itoa将数字转换成字符串,再写入文件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包