scanf 格式化输出在结构体数组的感受

学习fread函数和fwrite函数的时候用到了如下内容:

一、数组全局定义如下:

struct PerInf
{
    char name[20];
    char addr[20];
    char tel[11];
} student[3];

二、这个是学习fread函数的时候写的代码:

    for(i=0;i<n;i++)
    {
        fread(&student[i],sizeof(struct PerInf),1,fp);
        printf("姓名:%10s,  地址:%10s,  电话:%10s\n",student[i].name,student[i].addr,student[i].tel);
    }
    fclose(fp);

现象:

出现了几个现象,特在此进行标注方便以后回忆思考。

1、首先是在使用sfread函数获取结构体数组中的参数的时候,student[i].name,以及addr、tel都是数组,前两个是字符数组、后一个是整形变量,在并且每个前面都添加了&地址获取符,方面后续获取地址,但是会出现提示变量类型不相符,那个时候用的类型是&student[i]->name,原因咱不知道是什么,根据网络查询来看,换成&student.name这个报错消失了;

2、在报错全部消失后,输入内容进行代码简单的验证测试,发现这个结果不符合预期,在输入手机号(提示:手机号11位),显示数字不够长,我想到了int字符长度在64位系统位4字节,而且想到并通过网络验证了一个十进制数需要4个字节去存储,明显不够,采用网络提供的办法使用char 字符数组存储手机号码,可以方便的登记手机号码。

3、还有一个现象同时导致了手机号码的异常登记,就是student[i].name等其他成员,都是字符数组,所以在前面没有添加&地址获取符。这一块我还没有思考明白,会继续思考的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值