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输入,而字符数组不能,且字符数组输出来的就是首元素的值? 展开
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输入,而字符数组不能,且字符数组输出来的就是首元素的值? 展开
展开全部
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的用法。
输入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的用法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入姓名时用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
而且建议
scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight));
这句,把%d%c%d之间加上分隔符,比如%d,%c,%d,或者%d %c %d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
想要输入带有空格的字符串,用 gets(string);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询