c语言:为什么结构体里面的数组可以数组名输入,字符数组不能数组名输入?详情见下程序,请解释下原因?

#include<stdio.h>structStudent{intnum;charname[20];}stu;intmain(){charstring[14];prin... #include<stdio.h>
struct Student
{
int num;
char name[20];
}stu;
int main()
{
char string[14];
printf("请输入“I love China!”:\n");
scanf("%s",string);
printf("请输入学生的信息(学号,姓名):\n");
scanf("%d%s",&stu.num,stu.name);
printf("%s\n",string);
printf("%d %s\n",stu.num,stu.name);
return 0;
}
我就想问,为什么结构体成员的字符数字可以用%s输入,而字符数组不能,且字符数组输出来的就是首元素的值?
展开
 我来答
L_o_o_n_i_e
2011-05-17 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5214万
展开全部
scanf("%s",string);
输入 I love China !
string 只读入了 I
因为,%s 格式,用 空白 做分隔符。
残留的 输入部分在缓冲区内,下面的输入语句将用它们。
追问
为什么%s会是空格输入?什么原理
追答
%s %d %f --- 默认输入数据 都用 空白 作分隔符。空格 是 空白 的一种。
要读入 I love China ! 可以用 gets() 函数。
心云细雨
2011-05-17 · TA获得超过687个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:337万
展开全部
scanf函数碰到空格就结束当前变量的数据接收,然后开始接收下一个变量的数据,直到格式控制字符串结束为止,或者因某个错误条件而停止输入过程为止。
输入I love China!,这表示string接收了i,stu.num接收了love,这时候出错了,scanf就停止工作。
如果你输入Ilovechina! 45 mingzi就知道了,string接收Ilovechina!,stu.num接收45,stu.name接收mingzi。
scanf("%s",string);改为gets(string);(加头文件string.h)
或者改为scanf("%[^\n]",string);这个意思是除了换行符(回车键)以外,其他字符统统接收(包括空白符),碰到换行符才会结束string的数据接收。
具体百度一下scanf的用法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xwnjvvl
2011-05-18 · TA获得超过961个赞
知道小有建树答主
回答量:1073
采纳率:0%
帮助的人:0
展开全部
输入姓名时用scanf,不要用gets.gets会把上一个scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight)); 输入数据时,最后那个回车接收到,结果就等于你直接输入了一个回车,还没输入姓名.
而且建议
scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight));
这句,把%d%c%d之间加上分隔符,比如%d,%c,%d,或者%d %c %d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
弓长0001
2020-10-13
知道答主
回答量:1
采纳率:0%
帮助的人:565
展开全部
想要输入带有空格的字符串,用 gets(string);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式