scanf多值输入问题

有一个很严重的错误,你输入字符数组的两个
scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
scanf("%s",&person[i].category.position);
把这两行中字符数组输入时前面的&符号去掉,对字符数组输入本身就是地址,不要加&
改成这样
scanf("%d %s %c %c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
scanf("%s",person[i].category.position);

其他的也没有什么错误
记着输入时候,那几个值之间用一个空格隔开

追问
person[i].num是结构体数组的成员,对成员进行赋值应该要加&吧?还有按照我这样写但从输出结果上看是正确的,不知道是否存在内在的隐患?我刚开始学习C语言,希望您能帮我升入讲解一下。


回答
用scanf()函数输入的时候,本质是,你给scanf一个地址,这个函数会根据你输入的地址把
输入缓冲区中的数据放在指定地址处

象int ,char,double,long,float这些基本类型,再分配空间的时候,只是给他们一个空间
所以用scanf()输入的时候,要加&取地址符号,才能给他们赋值
然而char *,char [],这些本身是一块区域的首地址,本身就是地址,所以用scanf时,不用加&
因此,你输入里面不需要加的只有,person[i].name,person[i].category.position两个,其他的都是基本类型,因此都需要加


追问
我明白了,像我原来写得可能在运行的时候没有问题,可是在内存中存储的person[i].category.position数据只是输入的字符串的首字符对吧?这个调试的过程中可以看到(今天刚学的调试程序)。
————————————————
版权声明:本文为CSDN博主「司徒伽澜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jobsss/article/details/7492747

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值